🎯 什麼情境該想到我
當領域中「發生過某件重要的事」需要被記錄或讓其他部分做出反應——例如「訂單已付款」「帳戶已凍結」——而你不想讓發起方直接耦合去呼叫所有相關方時。
⚙️ 怎麼用(步驟 / 公式)
意圖:把領域中發生過的重要事實顯性建模成事件,用於解耦、稽核與跨聚合最終一致。
- 用過去式命名事件,表達已發生的事實(如
OrderPaid、InventoryReserved)。 - 事件是不可變的值:帶上發生時間與必要資料,一旦建立不再更動。
- 由聚合在狀態改變時發布事件;有興趣的處理者訂閱並各自反應。
- 用事件驅動跨聚合的最終一致——一個聚合的改變透過事件觸發另一個聚合更新。
- 保留事件流可作為稽核軌跡,甚至作為事件溯源(Event Sourcing)的基礎。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 最終一致意味著短暫的不一致視窗,需求要求即時強一致時不適用。
- 事件過多會讓流程變得難以追蹤(隱式跳轉),要節制並保持語意清晰。
- 事件應描述「發生的事實」,不要塞成命令或摻入接收方的邏輯。