Maven 架構(gòu)選型,單模塊還是多模塊?
點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)
作者:AMOS0626
來(lái)源:https://my.oschina.net/AmosWang/blog/4951326
1. 單模塊
優(yōu)勢(shì)
快速上手,前期開(kāi)發(fā)效率高。
劣勢(shì)
要想實(shí)現(xiàn)傳統(tǒng)的三層架構(gòu)(web/service/dao),多采用分包,分包帶來(lái)個(gè)問(wèn)題就是,包之間邊界約束不夠。
正常來(lái)說(shuō),三層架構(gòu)之間是有依賴(lài)關(guān)系的,dao --> service --> web,依賴(lài)是單向的。
舉個(gè)例子:前端請(qǐng)求的 xxxRequest 應(yīng)該放哪呢,放 web 還是 service,放 web 的話,service 應(yīng)該是不能訪問(wèn)的,所以怎么約束呢?
再極端一點(diǎn),dao 不能調(diào)用 service 吧,但項(xiàng)目中最不缺的就是臨時(shí)方案,所以怎么約束呢?
2. 多模塊(重點(diǎn)來(lái)了)
優(yōu)勢(shì)
約束能力,模塊間引用關(guān)系是明確的,項(xiàng)目架構(gòu)更清晰。推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例:https://github.com/javastacks/spring-boot-best-practice
劣勢(shì)
簡(jiǎn)單說(shuō),從頭搭著可能慢點(diǎn),用上模板都差不多。
首推阿里COLA:https://github.com/alibaba/COLA
本人結(jié)合 阿里COLA4.0 實(shí)現(xiàn)了一個(gè),模塊結(jié)構(gòu)如下
start(啟動(dòng)項(xiàng)目) think-client(api、dto) think-controller(controller,調(diào)用app) think-app(校驗(yàn)、封裝、執(zhí)行,調(diào)用domain、infrastructure) think-domain(DDD 領(lǐng)域模型,也可暴露接口,由infrastructure實(shí)現(xiàn)) think-infrastructure(db、rpc、search、防腐)
項(xiàng)目地址:https://github.com/AmosWang0626/think-cola
3. 怎么選?
作為應(yīng)用級(jí)架構(gòu),小項(xiàng)目,2~3個(gè)人開(kāi)發(fā)的,單模塊可能就足夠,前提是每個(gè)人都對(duì)架構(gòu)有認(rèn)識(shí),個(gè)人約束力很重要;
其他均建議多模塊,長(zhǎng)期來(lái)看,約束是第一生產(chǎn)力,架構(gòu)直接影響重構(gòu)的成本。
引用《代碼精進(jìn)之路:從碼農(nóng)到工匠》中的兩段話結(jié)尾:
要記住,留給公司一個(gè)方便維護(hù)、整潔優(yōu)雅的代碼庫(kù),是我們技術(shù)人員最高技術(shù)使命,也是我們對(duì)公司做出的最大技術(shù)貢獻(xiàn); 【防止破窗】首先我們要有一套規(guī)范,并盡量遵守規(guī)范,不要做“打破第一扇窗”的人;其次,發(fā)現(xiàn)“破窗”要及時(shí)修復(fù),不要讓問(wèn)題進(jìn)一步惡化。






關(guān)注Java技術(shù)??锤喔韶?/strong>


