DDD分層架構(gòu)與微服務(wù)代碼模型
微服務(wù)代碼模型
- Interface(用戶接口層):主要存放用戶接口層與前端交互突琳、展示數(shù)據(jù)相關(guān)的代碼拯啦。用來處理用戶發(fā)送的Restful請求澡匪,解析用戶輸入的配置文件,并將數(shù)據(jù)傳遞給Application層
- Application(應(yīng)用層):主要存放應(yīng)用層服務(wù)組合和編排相關(guān)的代碼褒链。應(yīng)用服務(wù)和事件等代碼會放在這一層目錄里唁情。
- Domain(領(lǐng)域?qū)樱褐饕娣蓬I(lǐng)域?qū)雍诵臉I(yè)務(wù)邏輯相關(guān)的代碼。聚合以及聚合內(nèi)的實體甫匹、方法甸鸟、領(lǐng)域服務(wù)和事件等代碼會放在這一層目錄里惦费。
- Infrastructure(基礎(chǔ)層):主要存放基礎(chǔ)資源服務(wù)相關(guān)的代碼,為其他層提供通用技術(shù)能力抢韭、三方軟件包薪贫、數(shù)據(jù)庫服務(wù)、配置和基礎(chǔ)資源服務(wù)的代碼都會放在這一層目錄里刻恭。
1瞧省、用戶接口層
- Assembler:實現(xiàn) DTO 與領(lǐng)域?qū)ο笾g的相互轉(zhuǎn)換和數(shù)據(jù)交換。一般來說 Assembler 與 DTO 總是一同出現(xiàn)鳍贾。
- Dto:它是數(shù)據(jù)傳輸?shù)妮d體鞍匾,內(nèi)部不存在任何業(yè)務(wù)邏輯,我們可以通過 DTO 把內(nèi)部的領(lǐng)域?qū)ο笈c外界隔離骑科。
- Facade:提供較粗粒度的調(diào)用接口橡淑,將用戶請求委派給一個或多個應(yīng)用服務(wù)進(jìn)行處理
2、應(yīng)用層
- Event(事件):這層目錄主要存放事件相關(guān)的代碼纵散。它包括兩個子目錄:publish 和 subscribe梳码。前者主要存放事件發(fā)布相關(guān)代碼隐圾,后者主要存放事件訂閱相關(guān)代碼(事件處理相關(guān)的核心業(yè)務(wù)邏輯在領(lǐng)域?qū)訉崿F(xiàn))伍掀。
- Service(應(yīng)用服務(wù)):這層的服務(wù)是應(yīng)用服務(wù)。應(yīng)用服務(wù)會對多個領(lǐng)域服務(wù)或外部應(yīng)用服務(wù)進(jìn)行封裝暇藏、編排和組合蜜笤,對外提供粗粒度的服務(wù)。應(yīng)用服務(wù)主要實現(xiàn)服務(wù)組合編排盐碱,是一段獨(dú)立的業(yè)務(wù)邏輯把兔。
3、領(lǐng)域?qū)?/h4>
- Aggregate(聚合):它是聚合軟件包的根目錄瓮顽,可以根據(jù)實際項目的聚合名稱命名县好,比如權(quán)限聚合。在聚合內(nèi)定義聚合根暖混、實體和值對象以及領(lǐng)域服務(wù)之間的關(guān)系和邊界缕贡。聚合內(nèi)實現(xiàn)高內(nèi)聚的業(yè)務(wù)邏輯,它的代碼可以獨(dú)立拆分為微服務(wù)拣播。
- Entity(實體):存放聚合根晾咪、實體、值對象以及工廠模式(Factory)相關(guān)代碼贮配。實體類采用充血模型谍倦,同一實體相關(guān)的業(yè)務(wù)邏輯都在實體類代碼中實現(xiàn)±崂眨跨實體的業(yè)務(wù)邏輯代碼在領(lǐng)域服務(wù)中實現(xiàn)昼蛀。
- Event(事件):存放事件實體以及與事件活動相關(guān)的業(yè)務(wù)邏輯代碼宴猾。
- Service(領(lǐng)域服務(wù)):一個領(lǐng)域服務(wù)是多個實體組合出來的一段業(yè)務(wù)邏輯。領(lǐng)域服務(wù)封裝多個實體或方法后向上層提供應(yīng)用服務(wù)調(diào)用叼旋。
- Repository(倉儲):存放所在聚合的查詢或持久化代碼鳍置,通常包括倉儲接口和倉儲實現(xiàn)方法。為了方便聚合的拆分和組合送淆,我們設(shè)定了一個原則:一個聚合對應(yīng)一個倉儲税产。
4、基礎(chǔ)層
Infrastructure 的代碼目錄結(jié)構(gòu)有:config 和 util 兩個子目錄偷崩。
Config主要存放配置相關(guān)代碼辟拷;Util主要存放平臺、開發(fā)框架、消息射众、數(shù)據(jù)庫汇陆、緩存、文件隅俘、總線、網(wǎng)關(guān)笤喳、三方類庫为居、通用算法等基礎(chǔ)代碼,你可以為不同的資源類別建立不同的子目錄杀狡。
總結(jié)
第一點(diǎn):聚合之間的代碼邊界一定要清晰蒙畴。在以后業(yè)務(wù)發(fā)展和需求變更時,可以很方便地實現(xiàn)業(yè)務(wù)功能和聚合代碼的重組呜象,在微服務(wù)架構(gòu)演進(jìn)中將會起到非常重要的作用膳凝。
第二點(diǎn):一定要有代碼分層的概念,搞清楚代碼的職責(zé)恭陡,將它放在職責(zé)對應(yīng)的代碼目錄內(nèi)蹬音。如果將核心領(lǐng)域邏輯代碼放到應(yīng)用層,微服務(wù)慢慢就會演變成傳統(tǒng)的三層架構(gòu)模型了休玩。