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