代碼架構設計-1.為什么要做好代碼架構設計

在項目的開始階段,一件必不可少的的事情就是就是確定代碼的分層和架構。該分層和架構在一定程度上決定了未來整個項目的代碼風格和維護性,對于項目的長期維護,代碼架構的設計是一件非常重要的事情。
在介紹代碼架構的設計之前,首先我們先談論下為什么代碼架構的設計師是一件非常重要的事情。

為什么要有代碼架構

簡單來講,代碼架構是為了提供更好的可讀性和可維護性。

提高可讀性和可維護性

大家可能還記得剛開始寫代碼的時候,所有的代碼都會集中在一個文件,甚至一個函數中,比如:

# main.py

def main(args: List[str]):
    input args validation...
    ...
    do first thing...
    ...
    do second thing...
    ...
    do third thing...
    ...

隨著需求的增長,代碼量的擴大,這樣的代碼是很難閱讀和進行維護的,于是我們會使用重構的手段去讓代碼更便于維護和閱讀:

# main.py

def do_first_thing(args: List[str]):
    ...

def do_second_thing(args: List[str]):
    ...

def do_third_thing(args: List[str]):
    ...

def validation(args: List[str]):
    ...

def main(args: List[str]):
    validation(args)
    do_first_thing(args)
    do_second_thing(args)
    do_third_thing(args)

進一步,我們將代碼分散在不同的文件、文件夾中,通過良好的命名,我們甚至可以在不去看具體的代碼實現的情況下,僅僅通過文件名就能判斷出在做的事情:

│   main.py
│
├───job
│       first.py
│       second.py
│       third.py
│
└───validation
        input_params_validation.py

而更深層次的,代碼架構的設計會降低代碼的腐化速度

降低代碼的腐化速度

通常在一個項目新起的時候,項目代碼的可讀性,維護性都會做的很好,然而隨著項目的龐大,不同背景不同能力的開發人員的進場和離場,代碼的可讀性和可維護性都會漸漸的變差,這個是一個項目進行過程中不可避免的,聰明的團隊通常不但會制定一系列的比如代碼質量掃描,代碼review等手段降低代碼的腐化速度,還會在在需求的開發過程中安排一定資源的代碼重構的任務,去不斷重構腐化的代碼。
而一個好的代碼架構,也會在一定程度上制約開發人員“生產”腐化代碼的可能,從而降低了代碼的腐化速度。這是因為在制定了代碼架構之后,入場的開發人員們通常會選擇遵從代碼架構的規則編寫代碼,通過規則的制約,可以很好的制止一些不謹慎的代碼的產生。
我們通過一個反例來看看,一個不好的代碼架構會對項目的開發產生怎樣的影響。
在一個真實項目中,大家制訂了一個這樣的簡單代碼架構:


項目代碼使用簡單的Controller->Service->Repository->Entity分層,其中Entity層作為數據庫的映射,并且整個代碼架構中,可以隨意傳遞entity, 甚至直接將entity傳遞出去

這樣的代碼架構會導致以下幾個問題:

  1. 沒有DTO的存在,開發人員會因為方便傾向于把entity直接丟出去作為request和response的數據映射。這樣當出現傳入參數和數據庫table設計出現不一致時,會出現很多的代碼問題。
  2. 由于并沒有任何相關的約束并且由于#1,開發人員有可能將業務邏輯相關的代碼同時放在controller和service中。這種做法會導致controller和service層出現強耦合,并且業務邏輯被分散在代碼的各個角落,導致很難去閱讀進一步降低可維護性。
  3. 由于代碼的事務控制是在service層做的,因為#2的原因,很多人在開發過程中并沒有一個對系統的全局概念,直接導致了很多的業務代碼出現了只能部分回滾數據的問題,直接導致的很多bug的出現。

由上文可以看到,一個好的代碼架構設計對于項目的必要性。接下來將介紹在web service中,比較常使用的代碼組織架構。

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

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,674評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,796評論 18 139
  • 1. 操作步驟 進入到東方財富通界面,在左側任意位置點擊鼠標右鍵,在彈出的界面中選擇“添加技術指標” 點擊添加技術...
    小閆小閆閱讀 38,693評論 0 2
  • 三毛【撒哈拉的故事】也許生活本身就是一片廣袤的沙漠,需得我們自己用心裝點自己的小世界,營造一片世外桃源,這樣我們也...
    老高cua閱讀 352評論 0 0
  • 和木屑、刨花一起,可制成質輕、隔音、絕熱、耐火的纖維板。
    Plasmnova閱讀 357評論 0 0