《2019年領域場景驅動設計實戰工作坊.pdf》由會員分享,可在線閱讀,更多相關《2019年領域場景驅動設計實戰工作坊.pdf(54頁珍藏版)》請在三個皮匠報告上搜索。
1、事件風暴案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂案例演練:為學課堂事件p 領域事件是過去發生的與業務有關的事實p 領域事件具有時間點的特征,所有事件連接起來會形成明顯的時間軸p 領域事件是管理者和運營者重點關心的內容,若缺少該事件,會對管理與運營產生影響p 領域事件會導致目標對象狀態的變化第一步:識別事件熱點在識別事件的過程中,若有以下情況,可以為事件標記熱點(Hot
2、Spot):p 暫不考慮的事件流分支p 出現分歧和爭執的事件p 需要強調的事件或事件對應的領域邏輯標記熱點事件p 領域事件的組成:名稱+動詞過去時態,如OrderCreated命名時,需要充分溝通和交流,提煉出統一語言事件的命名訂單已提交時間軸識別第一個事件訂單已提交時間軸前因前因?后果?后果?事件的驅動力訂單已取消訂單已提交課程已加入報名單診斷已完成課程已推薦診斷已開始試卷已生成試卷已提交訂單已支付在已支付前課程已移出報名單支付已完成考慮支付失敗訂單已創建訂單已提交收貨地址已填寫報名已完成方案A引入“訂單已創建”事件方案B引入“報名”或“報名單”領域概念課程名額已鎖定課程名額已釋放往來賬已生
3、成識別事件退費申請已提交開票申請已提交退費申請已審批退款已到賬開票申請已審批發票已開具教材已簽收訂單已完成課程名額已扣減教材已發貨識別事件申請未通過退費計算規則事件一共有四種參與者:p 角色(Role):觸發事件的人p 策略(Policy):觸發事件的規則p 外部系統(External System)p 事件(Event):即當前事件的前置事件角色策略外部系統注意:策略是規則,但規則不是策略??梢哉J為策略是規則+定時器的組合。事件第二步:識別參與者訂單已取消訂單已提交課程已加入報名單診斷已完成課程已推薦診斷已開始試卷已生成試卷已提交訂單已支付課程已移出報名單支付已完成考生考生交卷策略報名人報名
4、人支付系統報名人取消策略課程名額已鎖定課程名額已釋放識別參與者退費申請已提交退費申請已審批退款已到賬報名已完成教材已簽收訂單已完成申請人審批人支付已完成支付系統開票申請已提交開票申請已審批發票已開具申請人審批人金稅系統課程名額已扣減物流系統往來賬已生成教材已發貨訂單已發貨物流系統識別參與者限界上下文從兩個方向識別限界上下文:p 縱向:識別事件流中的事件,倘若相鄰兩個事件之間的關系較弱,或者體現了兩個非常明顯的階段,就可以對其進行分割。p 橫向:梳理所有的事件,根據組成事件的名詞和動詞去發現事件之間的相關性(相同、相似的名稱),然后去提煉一個整體的概念。第三步:識別限界上下文單一抽象層次原則每個
5、限界上下文從概念上應盡量處于同一個抽象層次,不能嵌套。識別限界上下文遵循的原則正交原則限界上下文之間不能互相影響,互相包含。訂單已取消訂單已提交課程已加入報名單診斷已完成課程已推薦診斷已開始試卷已生成試卷已提交報名已撤銷支付已完成學生學生交卷策略報名人報名人支付系統報名人診斷推薦報名訂單報名取消策略課程名額已鎖定課程名額已釋放課程課程訂單訂單已支付訂單往來賬已生成支付識別限界上下文退費申請已提交退費申請已審批退費已到賬報名已完成教材已簽收訂單已完成申請人審批人退費已完成支付系統開票申請已提交開票申請已審批發票已開具申請人審批人金稅系統訂單退費發票報名工作流工作流課程名額已扣減支付課程訂單已退費
6、訂單教材已配送物流系統訂單已配送物流系統識別限界上下文通過事件風暴:p首先識別跨限界上下文之間相鄰事件的關系p事件之間是否存在直接觸發的關系(參與者為前置事件),需要確定這兩個事件所述的限界上下文p判斷這兩個事件所屬的限界上下文,誰是主要的。主要的BC就是下游。通常,前置事件為下游,或者是事件的發布者第四步:識別上下文映射課程已加入報名單診斷已完成課程已推薦報名人診斷推薦報名如左所示,三個連續的事件分別處于三個不同的限界上下文:“診斷已完成”事件是“課程已推薦”事件的參與者,它們存在因果關系,前置事件所在的限界上下文為下游;“課程已加入報名單”由于有自己的角色參與者,故而與前置事件脫離了關系。
7、識別上下文映射診斷UD推薦報名訂單已取消如左所示,連續的事件分別處于不同的限界上下文:“訂單已提交”事件有自己的角色參與者,故而與前置事件脫離了關系;“報名已撤銷”由前置事件“訂單已取消”事件觸發,故而訂單上下文作為下游;“課程名額已釋放”事件由前置事件觸發,故而報名上下文作為下游。UD訂單已提交報名人報名訂單課程已加入報名單報名人報名已撤銷報名人報名取消策略訂單課程名額已釋放課程DU識別上下文映射訂單報名課程“訂單已支付”事件由“往來賬已生成”前置事件觸發,支付上下文是下游;“報名已完成”由“訂單已支付”前置事件觸發,因此,訂單上下文是下游;“課程名額已扣減”事件由“報名已完成”前置事件觸發
8、,因此,報名上下文是課程上下文的下游。訂單已支付訂單報名已完成報名課程名額已扣減課程往來賬已生成支付UDDUUD識別上下文映射支付訂單報名課程“訂單已完成”事件與“教材已簽收”事件比較特殊,前置事件由外部系統觸發,而外部系統不能作為下游發起對訂單上下文的調用,因此只能采用事件通知的方式??紤]到報名人需要跟蹤物流信息,由于前端不能直接與外部的物流系統交互,應通過訂單上下文發起對物流系統的調用,故而訂單上下文作為下游。教材已簽收訂單已完成訂單物流系統物流系統UDACL識別上下文映射訂單“訂單已退費”事件由前置事件“退費已到賬”事件觸發,因此支付上下文是訂單上下文的下游。退費已到賬支付訂單已退費訂單
9、UD識別上下文映射支付訂單物流系統UD支付系統UDUDUDUDUDUDACLACLUDDU上下文映射支付訂單退費診斷推薦報名課程發票工作流事件決策命令寫模型角色策略讀模型當前事件所在的限界上下文注意讀模型屬于哪個限界上下文,如果不是當前上下文,則:*重用別人的讀模型(遵奉者模式)*定義自己的讀模型*使用ID值對象(用于建立關聯)決策命令讀模型寫模型一個事件只能有一個寫模型;若出現多個寫模型,要么就是這多個寫模型存在包含關系,要么就是寫模型遺漏了一個對應的事件。前置事件第五步:領域分析建模試卷已提交診斷已完成完成診斷診斷試卷試題學生試卷已生成生成試卷課程試題試卷生成規則試卷提交試卷試卷學生交卷策
10、略課程已推薦推薦課程推薦診斷推薦規則課程課程已加入報名單將課程加入到報名單報名人報名單課程學生ID領域分析建模答案診斷推薦報名訂單已提交訂單已支付支付已完成報名已完成支付系統提交訂單報名人訂單收貨地址報名課程學生ID領域分析建模訂單領域分析建模學生課程試題試卷生成規則診斷試卷試卷試題答案診斷上下文識別聚合p 針對領域分析模型,梳理模型對象之間的關系(繼承、合成、聚合、依賴、無關系)p 確定領域模型對象是實體還是值對象p 將具有繼承或合成關系的領域模型對象放在一個聚合邊界內p 根據聚合的本質(概念完整性、概念獨立性、不變量Invariant、事務一致性)梳理聚合領域設計建模課程試題試卷生成規則試卷試卷試題標準答案分數分數輸入答案標準答案學生診斷事件熱點角色決策命令讀模型寫模型限界上下文策略外部系統事件風暴圖例前置事件角色構造型領域服務場景驅動設計場景驅動設計的過程時序圖場景驅動設計+TDD領域設計建模與領域實現建模DDD與測試戰略