本事件風暴系列是參加張逸老師的課程《面向場景的領域驅動設計全過程工作坊》的學習總結。僅作交流學習。
- 流程圖:是對現實世界的表現,比如第一步第二步該幹什麼,無法對軟件世界進行描述;
- 事件風暴:是對軟件世界的描述,是可以推導出軟件實現的。該工作坊的即文章的第1-4步主要是爲了識別出領域的業務全景。
事件
領域事件具有以下四個特徵,
- 領域事件是過去發生的與業務有關的事實。
- 領域事件具有時間點的特徵,所有事件連接起來會形成明顯的時間軸。 比如打電話時一個時間段對應兩個事件,包含通話已開始和通話已結束,兩個事件。
- 領域事件是管理者和運營者重點關心的內容,若缺少該事件,會對管理與運營產生影響。比如支付已開始和支付已結束兩個事件不是領域事件,支付已成功纔是關心的,纔是領域事件。
- 領域事件會導致目標對象狀態的變化。包含三種變化:從無到有,狀態的值改變,從有到無(很少)。比如商品已查詢到不算領域事件。銀行賬號已銷戶屬於狀態變化。
故,在事件風暴中,找事件是一件比較難的事情,需要一定的經驗的。
事件的命名
領域事件的描述格式爲 名詞+動詞過去式 ,e.g. OrderCreated;命名時,需要充分的溝通和交流,其目的是爲了提煉統一語言。
統一語言,一個是正確,一個是一致。首先在團隊中要達成一致。最好的情況是正確的且一致的。
錯誤的一致的命名 vs 正確的不一致的命名,前者更好,最後一定要使用 一致的命名。
熱點
在識別事件的過程中,若有以下情況,可以爲事件標記熱點(HotSpot):
- 暫不考慮的事件流分支
- 出現分歧和爭執的事件
- 需要強調的事件或事件對應的領域邏輯
熱點用於後面的提醒,有些熱點會轉爲領域分析模型中的讀模型,比如一些業務規則類的熱點。
事件的驅動力
關於UI,是從用戶角度,識別事件時注意不要把UI當作領域事件