摘自
http://www.reibang.com/p/96801c93a47d
https://segmentfault.com/a/1190000021159678
https://cloud.tencent.com/developer/article/1485817
https://cloud.tencent.com/developer/article/1121133
核心概念的落地
通過事件風(fēng)暴劃分限界上下文、識別實(shí)體
事件風(fēng)暴
- 參與的人員: 業(yè)務(wù)專家(業(yè)務(wù)人員或產(chǎn)品)沼头、開發(fā)人員吕粗、測試人員至壤、DDD專家等項(xiàng)目團(tuán)隊(duì)成員愚战。
- 目標(biāo):迅速高效分解業(yè)務(wù)領(lǐng)域近上,完成建模。
- 產(chǎn)出:
統(tǒng)一通用語言
識別實(shí)體
定義聚合
劃分限界上下文 - 步驟
- 識別領(lǐng)域事件
- 識別命令
- 尋找聚合
- 邊界劃分
識別領(lǐng)域事件
領(lǐng)域事件特征:
- 具有業(yè)務(wù)意義
- 過去時丧没,e.g: "XX已XX"
- 時序性
挑選任意一個與用戶有關(guān)的事件人弓,反向驅(qū)動出決策命令沼死,該用戶就是發(fā)出決策命令的人(角色)。從事件驅(qū)動出決策命令非常容易崔赌,就是將事件的過去時態(tài)轉(zhuǎn)換為動賓形式的決策命令即可意蛀。
識別命令
命令:不同角色用戶在界面上面的操作
命令產(chǎn)生的事件,用箭頭聯(lián)系起來;將角色通過不同的顏色標(biāo)示出來
根據(jù)決策命令與事件之間的因果關(guān)系健芭,推導(dǎo)出要發(fā)布該事件必須的前置信息县钥,即決策所需的讀模型。讀模型通常由用戶通過查詢操作獲得慈迈,可以理解為是決策命令行為的輸入?yún)?shù)若贮。
尋找聚合
通過對命令和事件的劃分找到聚合邊界,識別出分布在時間軸上面不同位置的相關(guān)命令和事件
根據(jù)事件狀態(tài)變更的目標(biāo)痒留,決定決策命令與事件之間的聚合對象谴麦。若無法確定,則保留一個空的黃色即時貼伸头,待以后確定匾效。
邊界劃分
界限上下文舉例
比如一個電商平臺,可以分為買家恤磷、賣家面哼、商品、訂單扫步、退貨等幾個界限上下文魔策。比如一個OA系統(tǒng),可以分為部門與員工基礎(chǔ)資料河胎、費(fèi)用管理闯袒、內(nèi)部考試、學(xué)習(xí)中心仿粹、員工考勤搁吓、釘釘通知(各種業(yè)務(wù)事件發(fā)生時調(diào)用釘釘框架發(fā)送消息)等。
界限上下文類型:
- 核心域:系統(tǒng)最核心并有復(fù)雜業(yè)務(wù)邏輯的業(yè)務(wù)界限上下文吭历,比如電商平臺的訂單上下文,OA系統(tǒng)的費(fèi)用管理上下文擂橘。
- 支撐域:系統(tǒng)支撐其他界限上下文的基礎(chǔ)晌区,比如電商平臺的商品,OA系統(tǒng)的員工基礎(chǔ)資料。
- 通用域:需要使用的基礎(chǔ)框架或第三方成熟解決方案朗若,比如OA系統(tǒng)中封裝的釘釘框架上下文恼五、學(xué)習(xí)中心。
一個聚合可能是最小顆粒度的界限上下文哭懈,同時灾馒,我們常合并業(yè)務(wù)相關(guān)性很高的聚合
選擇當(dāng)前事件的后置事件。若后置事件仍然與用戶有關(guān)遣总,則重復(fù)第一步睬罗;若后置事件與外部系統(tǒng)有關(guān),可以跳過該事件的建模旭斥,繼續(xù)選擇下一個后置事件容达。若事件與策略有關(guān),在進(jìn)一步細(xì)化策略對象之后垂券,驅(qū)動出決策命令花盐,重復(fù)第三步。