為什么引入事件風暴:
從經典之作《領域驅動設計》以及領域驅動資源研究者了解到,事件風暴之一的作用就是拉通業務方、產品、研發、測試對業務知識的統一理解,避免各方理解誤差。但在實際操作中受限於各方時間協調的難度及領域專家的角色的缺失,事件風暴往往作為理解業務,領域建模及領域划分的利器去使用。
什么是事件風暴:
事件風暴是一種以工作坊的方式對復雜業務領域進行探索的高效協作方法,事件風暴強調以事件驅動團隊探索分析業務領域。
- 一種捕獲行為需求的方法
- 強調以先發散后收斂的方式開展
- 相關干系人協作的方式進行
- 注重對領域事件的識別
事件風暴相關元素:
1.事件(橙色):重要且已發生的事情。命名方式:完成時+被動語態=賓語+動詞過去式
2.命令(藍色):產生事件觸發的動作
3.角色/執行者:觸發命令的主體,包括:人員(淺黃色)、系統(紅色)、定時任務(綠色)
4.讀模型:執行者決策執行命令時參考的視圖元素
5.寫模型:狀態發生變化的對象,真實因為對象發生了變化才導致事件的發生
事件風暴准備工作:
1.業務相關干系人
2.貼紙
3.事件風暴主導人
事件風暴操作流程:
我們以大家非常熟悉的騎行共享單車為例,進行事件風暴的演練
1.識別重要事件
2.識別命令
3.識別執行者和讀模型
4.識別領域對象
領域對象識別的方法:
- 識別命令和事件中的名稱,這些名稱就對應初步識別的領域對象
- 根據名詞對命令和事件進行重排序,作用於同樣名詞的時間和對象放到一起
- 作用於的名稱就可以作為領域對象
領域對象就不進行貼圖,分為2大領域對象:用車、申訴單
5.根據領域對象進行領域划分
從上圖可以看到,用車域過於龐大,是否可以繼續拆分,這是我們有兩種依據進行拆分:1.識別關鍵事件以此作為拆分的節點,2、識別事件的緊密關系程度
我們依據此兩個標准進行分析,掃碼是關鍵的時間節點,掃碼后用戶可以進行用車了,同時掃碼和后續的事件有緊密的關系,不掃碼無法進行后續的操作,那么我們進行進一步的拆分,拆分為三個領域,如下圖:
6.引入寫模型進行領域划分
在第5步,根據領域對象進行領域划分時我們遇到一個問題點就是用車的領域過於龐大,我們依據重要事件節點和事件緊密程度進一步划分,但是過於依賴經驗和專家意見,有沒有一種比較客觀的方式呢,有,就是引入寫模型,寫模型基於現實單據和職責的角度去進行分析,思路清晰更加清晰。
如下圖:預約命令基於預約單進行業務處理,那其歸屬預約域。掃碼、確認開鎖、確認還車基於行程單,那么歸屬行程域。車費申訴基於申訴單,歸屬申訴域。
還車檢查不會改變行程狀態,且是無狀態的,或者說我們暫時未識別到對應的寫模型,那么我們作為一個策略域單獨維護。
事件風暴為什么有效:
事件風暴以事件作為驅動,源於事件意味一種因果關系的推斷,更符合人類的思考習慣,同時干系人各方都參與進去,可以從各個維度進行全面的分析。
----------------------
todo:
事件風暴中各個元素的作用,為什么引入這些元素