2018-08-25 如何熟悉一個新項目

如何熟悉一個新項目

目錄

很多新人進入一家新公司后重挑,最頭疼的就是如何快速了解公司的業(yè)務(wù)和項目架構(gòu)嗓化。或者說不要求快速谬哀,給你足夠的時間刺覆,也很難在龐大的業(yè)務(wù)中整理出思緒。當(dāng)然史煎,如果你碰到一個特別熱心的老員工谦屑,事無巨細(xì)地給你講,隨時在你身邊答疑解惑篇梭,那可能還好氢橙。但很可惜,我沒有碰到這樣的人恬偷,在加入新公司后悍手,帶我的人幾乎沒有花時間給我講項目,也沒有給我安排一些可以熟悉項目的需求喉磁。就這樣的一個多月時間里谓苟,我慢慢開始靠自己的力量熟悉大概十個項目官脓,并在過程中總結(jié)了一些方法协怒,借此機會記錄一下,并分享給大家卑笨。

這里強調(diào)一點孕暇,我的策略并不是快速了解一個項目的具體業(yè)務(wù),這個不同項目也不一樣赤兴,無法總結(jié)妖滔。我的策略是大體了解整個業(yè)務(wù)線上的所有項目,大概摸清楚每個項目都是干嘛的桶良,他們之間的關(guān)系如何座舍,以便以后不論具體負(fù)責(zé)任何項目不至于找不到方向,具體到細(xì)節(jié)的業(yè)務(wù)陨帆,雖然需要花時間曲秉,但相比對整體上的一頭霧水,還是簡單許多的疲牵。

一. 必要條件

我們首先要想的是承二,有了哪些必要條件后,只要給你足夠的時間纲爸,你總是能夠完全了解整個項目的亥鸠?這里說的必要條件不是“項目面對的客戶是誰”,“項目用的框架是什么”這種,而是真真正正的必要條件负蚊,就好比用幾條數(shù)學(xué)公理能推出整個數(shù)學(xué)體系一樣神妹。這里我總結(jié)的真正的必要條件只有這兩點:

源碼位置(gitlab或svn),部署環(huán)境(dev/test/online)

所謂項目家妆,其實就是一堆代碼放在了一堆機器上而已灾螃,所以這些就足夠了。當(dāng)然揩徊,為了更加節(jié)約時間腰鬼,最好還要到wikijenkins塑荒、頁面訪問路徑熄赡、數(shù)據(jù)庫地址,我之所以說那兩個必要條件齿税,是想說其實項目本質(zhì)上就是這么簡單的一個事彼硫,你千萬不要想的太復(fù)雜。它的業(yè)務(wù)可以無限復(fù)雜凌箕,但它的本質(zhì)卻逃不出這些拧篮,你千萬不可以糊涂。當(dāng)你無從下手或者什么都不清楚的時候牵舱,那么就主要把源碼和環(huán)境弄清楚吧串绩,其它的都是附屬品。

二. 從頁面到數(shù)據(jù)庫的線

有了上面的必要條件后芜壁,我們就開始了解項目了礁凡。由于不只是一個項目,所以千萬不能深入具體代碼慧妄,否則你就越來越煩直到放棄顷牌,也不會有好的效果。對某個具體項目的了解塞淹,一定要建立在對整體了解的基礎(chǔ)上窟蓝。這時我們首先為各個項目畫出一條線,并標(biāo)明每一個節(jié)點的信息饱普,就像下面的樣子:

頁面訪問路徑--前端項目--后臺服務(wù)--數(shù)據(jù)庫地址

這里的一個前端項目可能對應(yīng)多個后臺服務(wù)运挫,所以最終的圖應(yīng)該差不多是這樣:

image

這個整理的過程,主要是讓自己梳理清楚费彼,一共有哪些項目滑臊,哪些是前端可視的,哪些是后臺提供服務(wù)的箍铲。并且雇卷,大致了解到了前端項目分別調(diào)用了哪些后臺服務(wù),通過后臺服務(wù)和數(shù)據(jù)庫的名稱,我們能從本質(zhì)上了解到這條業(yè)務(wù)線提供了什么功能关划,從前端項目和頁面路徑小染,我們能了解到我們需要給用戶展示什么。注意贮折,這個階段我們只是見名知意裤翩,即使點開頁面,連接上數(shù)據(jù)庫看看调榄,也千萬別花過多的時間踊赠,這個階段的重點就是僅僅知道,這條業(yè)務(wù)線提的整體內(nèi)容每庆。

在此基礎(chǔ)之上筐带,這個圖可以不斷細(xì)化,比如項目部署的機器缤灵,我們可以標(biāo)注在項目旁邊伦籍,或者保存在xshell里。此外所有非業(yè)務(wù)相關(guān)的腮出,能查到的盡量都記錄下來帖鸦,這個真的為以后找各種東西方便太多了,否則別看你現(xiàn)在節(jié)約了時間胚嘲,把以后查找相關(guān)東西的時間加起來作儿,將會是天文數(shù)字了。

這里關(guān)于整理項目部署的機器還有個小插曲慢逾,跟大家分享一下立倍。由于這部分的信息沒人會一個一個地告訴你,就算有也不可能說的特別全侣滩。所以我是借助jenkins來整理的。項目部署都需要用到j(luò)enkins变擒,只要查看jenkins配置的命令君珠,就可以把部署環(huán)境一一整理出來,這個我認(rèn)為是最全而且最新的娇斑。不要和我說查wiki策添,如果公司wiki都寫的這么全,我估計就沒這篇文章什么事了毫缆。當(dāng)時我的jenkins權(quán)限特別少唯竹,只能看一部分項目,而且還只能執(zhí)行苦丁,不能看配置浸颓,帶我的人也是摳門,每次問他都給我開通所需要的項目的執(zhí)行權(quán)限,多一點都不給产上。后來我也懶得問了棵磷,由于jenkins機器大家都可以用root權(quán)限登陸,所以我進入jenkins的配置文件config.xml晋涣,給我自己添加了一個admin權(quán)限仪媒,重啟jenkins,再打開之后屏幕滿滿的項目都出來了谢鹊,而且都可以查看和修改算吩,暢通無阻。我就這樣通過一個個jenkins的配置佃扼,整理了部署的機器赌莺,也看了下啟動的邏輯。

三. 了解項目間的關(guān)系

這部分如果有老員工愿意和你說說松嘶,那最好還是了解一下艘狭。如果沒有也沒關(guān)系,先跳過這段翠订,以后慢慢了解也是可以的巢音。

四. 整理數(shù)據(jù)庫表

我們上面都是整理項目的大體框架,還沒有涉及到具體的項目細(xì)節(jié)尽超。這一部分官撼,仍然不去涉及。如果說站在整個業(yè)務(wù)的本質(zhì)上看似谁,業(yè)務(wù)無非就是一堆代碼運行在一堆機器上傲绣。那么站在單個項目來看,一個項目無非就是對數(shù)據(jù)庫的增刪改查操作而已巩踏,或者從使用者的角度看秃诵,一個項目就是輸入一些參數(shù)得到一些返回結(jié)果。所以接下來我們要做兩件事塞琼,一個是整理數(shù)據(jù)庫表菠净,一個是整理Controller層的所有接口。

這里首先要選擇一個核心項目去看彪杉,眾多項目中一定有一個是核心項目毅往,先從這個開始看起。

如果數(shù)據(jù)庫的表比較少派近,那我們拿工具導(dǎo)出來表結(jié)構(gòu)攀唯,一個個看就行了,這個不難渴丸。但如果數(shù)據(jù)庫表特別多侯嘀,我們首先要將表名全部導(dǎo)出另凌,篩選出那些核心的表。這里導(dǎo)出表名残拐、篩選表以及后面的分析表字段途茫,不妨給自己做個工具,我在遇到一些很麻煩的或者感覺以后還可以通用的事情時溪食,就會做成一個小工具囊卜,放在一個我給自己起名為javamate的程序中,這些小工具逐漸積累起來你會發(fā)現(xiàn)今后有意想不到的方便错沃。話說回來栅组,如何判斷哪些是核心表呢,不要著急枢析,我們首先排除掉一些沒用的玉掸。拿我在公司分析的系統(tǒng)來說,一共150多個表醒叁,其中有好多copy結(jié)尾的是備份司浪,flow結(jié)尾的是流水,rel結(jié)尾的是中間關(guān)聯(lián)表把沼,statistics結(jié)尾的是數(shù)據(jù)統(tǒng)計表啊易,log結(jié)尾的是日志表,config結(jié)尾的是配置表饮睬。等等租谈。排除掉這些對核心業(yè)務(wù)理解無影響的表之后,所剩的也就20來張表捆愁,再根據(jù)他們的名字割去,可以看出好多表是屬于一類的,比如order表就有各種order昼丑,按類別再分出來也就四五類呻逆,再分析起來就不難了。當(dāng)然如果是更大的體系結(jié)構(gòu)矾克,那就要再不斷做拆解页慷。

再具體分析這些核心表字段之前,還要做一件事就是找出表中間的關(guān)系胁附。如果表b中有個字段叫比如a.id,那么ba就是一對多的關(guān)系滓彰,如果兩個表有rel中間表控妻,那二者就是多對多的關(guān)系,起碼從邏輯上講是這樣的揭绑。這個分析過程我也是做了個小工具弓候,通過程序來判斷的郎哭。

到此,你就對整體的數(shù)據(jù)庫結(jié)構(gòu)有所了解了菇存。根據(jù)表名也能對表的大致內(nèi)容有所了解夸研,接下來就是針對具體的表,看里面具體的字段和前人給出的備注依鸥,這個過程就沒有技巧了亥至,要耐心,要慢慢熬贱迟。

五. 整理Controller層接口

當(dāng)你對數(shù)據(jù)庫表做了以上到了解后姐扮,你基本上對這個系統(tǒng)能提供什么服務(wù)了解到差不多了。這個不論你的代碼長什么樣子衣吠,數(shù)據(jù)庫擺在那里茶敏,其實能提供的服務(wù)就已經(jīng)差不多出來了,對于有經(jīng)驗的人來講缚俏,代碼的業(yè)務(wù)邏輯也大致能猜到個八九分惊搏。我們梳理了大后方,那接下來就是把最前端和別人交互的部分搞清楚忧换,這樣掐頭去尾恬惯,整個項目就解剖的差不多了。

這里我也給自己做了個小工具包雀,掃描出所有的controller層的接口宿崭,展示出方法名,路徑名才写,參數(shù)列表和返回值等葡兑,但可惜沒能展示注釋,有大神可以幫我想想赞草。和數(shù)據(jù)庫一樣讹堤,如果接口很少那么一個個看,如果特別多厨疙,還是先找出比較核心的幾個方法研究洲守。這里我用的是postman,把要研究的接口訪問保存起來沾凄,并且添加訪問成功和失敗的Example梗醇。這里我推薦自己開發(fā)的時候也把postman用起來,越詳細(xì)越好撒蟀,postman不只是可以簡簡單單訪問你的接口叙谨,還能做批量測試,還可以生成api文檔用于和前端交互保屯。這樣你不但測試了自己的接口手负,還省的寫文檔了涤垫。而且postman還有個好處就是可以給自己的接口mock一個服務(wù),這樣即使你的接口掛了竟终,或者你的接口根本就沒寫好蝠猬,你可以讓前端人員先訪問你的mock,完全不影響前端邊測試邊開發(fā)统捶,這才是真正的前后端分離嘛榆芦。

六. 重新理清項目間的關(guān)系

好了,這時候每個項目你已經(jīng)大致了解瘾境,最起碼調(diào)用的效果歧杏,數(shù)據(jù)庫所能提供的服務(wù),你是清楚的迷守。這個時候犬绒,要重新整理下項目之間的關(guān)系。

  1. 根據(jù)之前的接口名稱兑凿,詳細(xì)了解下項目間的調(diào)用關(guān)系凯力。理不清的部分去問老員工,這時候你帶著自己的了解問礼华,他們也能給出更多的信息咐鹤。
  2. 看看每個項目中用到的中間件,主要是mq服務(wù)圣絮,看看誰是生產(chǎn)者祈惶,誰是消費者,以此來了解關(guān)系
  3. 這時你應(yīng)該已經(jīng)開了好幾輪的周會了扮匠,接下來的周會你應(yīng)該能聽懂部分內(nèi)容捧请。根據(jù)每個人的描述和最新的幾組需求,逐漸摸清楚現(xiàn)在項目面臨的問題棒搜,以及哪個項目是核心疹蛉,哪個項目是輔助,哪個項目是以穩(wěn)定安全為主的

到此為止力麸,整條業(yè)務(wù)線你就有了大致的了解可款,接下來就要結(jié)合你具體負(fù)責(zé)的內(nèi)容,領(lǐng)導(dǎo)安排你做的方向克蚂,去看具體的業(yè)務(wù)代碼了闺鲸。深入其中,事無巨細(xì)地了解埃叭。但此時翠拣,你通過前面的努力,你已經(jīng)可以站在一定的高度看每一個項目了游盲,雖然你細(xì)節(jié)上還是不了解误墓,但這是完全不同的。在研究具體業(yè)務(wù)代碼的同時益缎,不斷地跳出來看整條業(yè)務(wù)線的框架谜慌,修正之前由于不了解具體業(yè)務(wù)而理解錯誤的架構(gòu)。長此以往莺奔,你一定會在某個項目中脫穎而出欣范,讓大家認(rèn)識到你的全局視野,這也是走出老是寫增刪改查代碼怪圈的一個途徑令哟。慢慢會有人意識到恼琼,你對項目的理解總能站在全局的視野,很多需要跨項目去做的業(yè)務(wù)屏富,也會自然而然想到你晴竞,慢慢地,你會接觸到更為核心的東西狠半,成為架構(gòu)師噩死,或者去轉(zhuǎn)向產(chǎn)品,轉(zhuǎn)向管理神年。

這就是我總結(jié)的了解項目的過程已维,我工作年限不多,經(jīng)驗上還不夠豐富已日,希望大佬們多多留言指點垛耳,提出問題,共同進步飘千。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堂鲜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子占婉,更是在濱河造成了極大的恐慌泡嘴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆济,死亡現(xiàn)場離奇詭異酌予,居然都是意外死亡,警方通過查閱死者的電腦和手機奖慌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門抛虫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人简僧,你說我怎么就攤上這事建椰。” “怎么了岛马?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵棉姐,是天一觀的道長屠列。 經(jīng)常有香客問我,道長伞矩,這世上最難降的妖魔是什么笛洛? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮乃坤,結(jié)果婚禮上苛让,老公的妹妹穿的比我還像新娘炮捧。我一直安慰自己混萝,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布期奔。 她就那樣靜靜地躺著厅须,像睡著了一般仿畸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上九杂,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天颁湖,我揣著相機與錄音,去河邊找鬼例隆。 笑死甥捺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镀层。 我是一名探鬼主播镰禾,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唱逢!你這毒婦竟也來了吴侦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坞古,失蹤者是張志新(化名)和其女友劉穎备韧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痪枫,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡织堂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奶陈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片易阳。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吃粒,靈堂內(nèi)的尸體忽然破棺而出潦俺,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布事示,位于F島的核電站早像,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏很魂。R本人自食惡果不足惜扎酷,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遏匆。 院中可真熱鬧,春花似錦谁榜、人聲如沸幅聘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝蒿。三九已至,卻和暖如春巷怜,著一層夾襖步出監(jiān)牢的瞬間葛超,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工延塑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绣张,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓关带,卻偏偏與公主長得像侥涵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宋雏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容