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