1. 單模塊
優勢
快速上手,前期開發效率高。
劣勢
要想實現傳統的三層架構(web/service/dao
),多采用分包,分包帶來個問題就是,包之間邊界約束不夠。
正常來說,三層架構之間是有依賴關係的,dao --> service --> web
,依賴是單向的。
舉個例子:前端請求的 xxxRequest
應該放哪呢,放 web
還是 service
,放 web
的話,service
應該是不能訪問的,所以怎麼約束呢?
再極端一點,dao
不能調用 service
吧,但項目中最不缺的就是臨時方案,所以怎麼約束呢?
2. 多模塊(重點來了)
優勢
約束能力,模塊間引用關係是明確的,項目架構更清晰。
劣勢
簡單說,從頭搭着可能慢點,用上模板都差不多。
- 首推阿里COLA https://github.com/alibaba/COLA
- 本人結合 阿里COLA4.0 實現了一個,模塊結構如下
- think-cola
- start(啓動項目)
- think-client(api、dto)
- think-controller(controller,調用app)
- think-app(校驗、封裝、執行,調用domain、infrastructure)
- think-domain(DDD 領域模型,也可暴露接口,由infrastructure實現)
- think-infrastructure(db、rpc、search、防腐)
- 項目地址:https://github.com/AmosWang0626/think-cola
- think-cola
3. 怎麼選?
作爲應用級架構,小項目,2~3個人開發的,單模塊可能就足夠,前提是每個人都對架構有認識,個人約束力很重要;
其他均建議多模塊,長期來看,約束是第一生產力,架構直接影響重構的成本。
引用《代碼精進之路:從碼農到工匠》中的兩段話結尾:
- 要記住,留給公司一個方便維護、整潔優雅的代碼庫,是我們技術人員最高技術使命,也是我們對公司做出的最大技術貢獻;
- 【防止破窗】首先我們要有一套規範,並儘量遵守規範,不要做“打破第一扇窗”的人;其次,發現“破窗”要及時修復,不要讓問題進一步惡化。