日常開發中,如何給團隊留下財富?

技術團隊中,財富即代碼,但并不是所有的代碼都是財富,有些代碼可能是毒藥。前段時間看到一篇文章,“你寫的代碼,是別人的噩夢嗎?”,雖然標題針對我們技術人員來說,可能有點刺耳,但有時候確實是不爭的事實。

在碼奴圈,有一句話很流行:“能運行工作的代碼就是好代碼”。這句話沒有對與錯,在小的創業團隊或人員能力不足的情況,能運行工作的代碼確實是好代碼,因為它解決了我們當時的問題。在對于有追求的技術人員來說,特別是在一個多人開發的團隊中,產品功能在不停的迭代、優化,好代碼就會我們的開發效率與維護效率帶來成倍的提升。

何謂“好代碼”,每個人的答案其實是不一樣的。但說到“壞代碼”,大家應該都能說出一籮筐來。

我先說一下我認為的“壞代碼”:可讀性差、業務邏輯相互纏繞、代碼復用性低,這樣帶來的后果將是隱藏bug、團隊其他人員調用或維護難以入手,更嚴重的可能就是重構。有時候可能陷入不停的重構循環當中去。原因有二:1.自己寫的代碼,沒有重構到關鍵點上;2.下一個重構者與上一個開發者不分伯仲。

那好代碼就是壞代碼的反面:可讀性強、業務邏輯低耦合高內聚、代碼復用性高、有良好的可拓展性

說了這么多,解決問題才是王道,如何才能按照上面說的好代碼的目標開發,下面分享給大家一個容易入手的方法。

一、面向用例編程(橫向):

1.先把系統按照功能進行劃分,細化成多個功能模塊。做到每個模塊的功能是相對獨立的,但也有可能一個模塊與另一個模塊有交互。

2.將功能需求進行抽象,達到高內聚、低耦合的標準,明確該功能模塊的參與者是什么。

3.對每一個功能模塊進行業務分析,看看是否能再按照子功能進行細分,細分后形成具體的用例。

4.對具體用例進行分析,理清用例與參與者的關系、參與者與參與者的關系、以及用例與用例的關系。

將功能需求劃分成一個個獨立的用例后,我們就能很清晰的表達功能需求的分離與組合。即先造一個個通用的輪子,然后對這些輪子按照業務需求進行組裝。這樣就能達到有良好的組件顆粒度,很好的滿足了代碼結構清晰、復用性強、組件可任意插拔、各個功能可以獨立測試(單元測試)的目標。

面向用例編程的核心是把業務分解成一個個小的獨立的case(解耦),在根據業務需求將相關case聚集、組裝在一起(內聚)。最終又回歸到我們經常說的低耦合、高內聚的目標之上。大到模塊劃分、小到函數定義,都是同樣的方法。業務case集成一個模塊,功能函數聚集成一個類。

面向用例編程也是封裝的一種體現。將內部邏輯封裝在一個盒子(case)里,對外只需要暴露接口。調用者也只需要關注接口,不關心底層邏輯。

所以在我們開發之前,進行業務建模,還是很重要的。

二、分層架構(縱向)


上面說的面向用例編程是從橫向對業務功能進行解耦,那分層架構就是從縱向上對功能職責的劃分。不論是后端開發、前端開發還是客戶端開發,分層架構很普遍。通常我們會在縱向上對項目進行三層劃分:展示層、業務邏輯層、數據訪問層。MVC、MVP、MVVM都是為了更好的分層。

在團隊成員中,經常會有人質疑分層,認為有時候明明是一個很簡單的邏輯,非要搞幾層數據轉換,把結構搞的比較復雜。這個觀點也沒有錯,在生活中能用簡單的方法完成一件事情卻故意把事情搞的很復雜,確實是多此一舉。但我們通常是做一個復雜、龐大且不停迭代更新的項目,功能業務可能會像網狀一樣交織在一起。如果沒有清晰的結構、各個組件各司其職,如何能保證多人開發的團隊敏捷高效的共同開發,發現問題及時定位問題所在。

三、建立約束(規則)

約束即規范,團隊成員按照一套統一的規范開發,盡可能的降低溝通成本(了解現有代碼邏輯成本、業務調用成本、維護成本等)。約束包括一下幾個方面:

1.命名規范:按照規范進行合理的命名,BEAN、ENTITY、DTO、API等都分別代表不同的標簽或職責。看到名稱就知道它能做什么事情。

2.分模塊、分包:每一個組件或包都有自己明確定義的職責,不可以亂放。presenter包只放Presenter,config包只放配置文件等。

3.統一的結構:項目主體要統一結構,堅決不能出現相似業務不同代碼結構,這樣只會讓參與項目的其他成員不知所錯。

4.代碼檢查:如果有可能或有條件的話,通過工具或插件進行項目代碼的檢查,可以是靜態的編譯檢查,也可以是動態的運行時檢查。

總之,建立約束,就是讓項目的參與者開發出來的代碼盡可能的保持風格一致。

上面說了這么多,我們在開發過程中,只要代碼具有低耦合、高內聚、可拓展、有良好的可讀性,就是給團隊創造財富。


Android客戶端分層架構實戰,FoolMVP。

一種MVP的實現方式,目標:代碼高度復用、良好的組件顆粒度、方便進行單元測試,結構盡量清晰簡單的高內聚低耦合的分層結構。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容