天天看點

Maven 架構選型,單子產品還是多子產品?

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​​

3. 怎麼選?

作為應用級架構,小項目,2~3個人開發的,單子產品可能就足夠,前提是每個人都對架構有認識,個人限制力很重要;

其他均建議多子產品,長期來看,限制是第一生産力,架構直接影響重構的成本。

引用《代碼精進之路:從碼農到工匠》中的兩段話結尾:

  • 要記住,留給公司一個友善維護、整潔優雅的代碼庫,是我們技術人員最高技術使命,也是我們對公司做出的最大技術貢獻;
  • 【防止破窗】首先我們要有一套規範,并盡量遵守規範,不要做“打破第一扇窗”的人;其次,發現“破窗”要及時修複,不要讓問題進一步惡化。