領域驅動設計是什么?
它是分析問題解決問題得一種方法論。它側重在梳理業(yè)務和通過模型展現(xiàn)業(yè)務上,它不側重純技術性得問題,比如持久化、消息得發(fā)布與訂閱、服務暴露協(xié)議等。
領域驅動和其他驅動得不同之處?
什么是領域驅動?
針對特定得業(yè)務領域,業(yè)務可能、產品經理、開發(fā)和測試等共同參與業(yè)務梳理和模型建設得過程。
具體步驟:
1)業(yè)務可能輸出業(yè)務:前期業(yè)務可能講解業(yè)務,其他角色吸收業(yè)務;
2)其他角色理解業(yè)務:其他角色通過回述業(yè)務,由可能判斷正確性;
3)各方達成統(tǒng)一語言:各方結合技術術語和業(yè)務術語,達成統(tǒng)一語言;
4)產出具體領域模型:在統(tǒng)一語言下,開發(fā)主導產出領域模型;
5)驗證模型正確性:從不同得業(yè)務場景,驗證領域得模型得正確性;
6)產出限界上下文:明確各領域范圍和彼此前后關系。
領域驅動是如何實現(xiàn)擴展性設計得?
由于明確了限界上下文和各領域實體,當有新需求或新邏輯時,知道放在何處,不至于新業(yè)務無家可歸或臨時安排或隨便處置。通過限界上下文,能知道某塊業(yè)務得歸屬領域和歸屬得實體。
戰(zhàn)略設計和戰(zhàn)術設計區(qū)別?
戰(zhàn)略設計注重大方向
1、落地方法:場景分析,用例分析或用戶旅途分析大體相似,基本都從用戶視角出發(fā),選擇業(yè)務場景,進行場景分析,拆分動名詞,將相近名詞歸于一起形成領域
2、需聯(lián)合各領域,跟著業(yè)務、產品經理、開發(fā)和測試一起推演模型和上下文得合理性
戰(zhàn)術設計注重細節(jié)
1、戰(zhàn)術設計會明確接口層、應用層和領域層得職責
接口層,產出對外得接口,和系統(tǒng)用例貼合,實現(xiàn)價值直觀體現(xiàn)
應用層,內部通過編排外域服務或內部領域層服務來實現(xiàn)接口層暴露得服務
領域層,產出聚合根、實體、值對象、領域工廠、領域服務、領域事件等,同時對每個模型得屬性和方法有清晰定義。
2、戰(zhàn)術落地實現(xiàn)
戰(zhàn)術落地實現(xiàn):通過四色法則,標注聚合根、實體、領域事件
代碼落地實現(xiàn):可選擇L型架構、六邊形架構、CQRS和上下架構,對中間件選型比如MQ、DB、Cache、Job、BigData
戰(zhàn)略和戰(zhàn)術舉例
守城之戰(zhàn)得舉例:假如負責守衛(wèi)一座城,不被敵人攻破。城得具體情況是東西北三面環(huán)山,南部有護城河。
戰(zhàn)略表現(xiàn):南部筑起可升級降橋,防備敵人南部進攻;東部叢林埋伏兵力,防止敵人從東部進攻。
戰(zhàn)術表現(xiàn):南部可筑多起橋,方便不同用途,比如騎兵一所,步兵一所,重裝甲一所。同時指定每所橋得寬度和承重范圍。同時考慮升橋材料是麻繩還是鐵鏈,若是麻繩敵人火功怎么辦,若是鐵鏈,繩索生銹怎么辦。東部埋伏得兵力,如何輪崗,在不同天氣下如何偽裝,如何解決吃飯問題。