事件風暴過程全體驗 - 上篇

故事背景

場景源於一個打劫案件,當劫匪拿出他的槍,來自未來的超能攝像頭髮現危險馬上自動報警。同時,各位正義英雄暗地裏開始出動!

哪知道這班劫匪也不是蓋的,某正義英雄(請自動腦補蝙蝠俠)雖然第一個到場,和劫匪激戰一輪居然也還沒拿下,無奈中只能觸發身上的升級預警裝置通知總部增援。

這裏用一個簡化版的用戶旅程地圖描述了這個場景。通常地,類似的用戶旅程就正是掀起事件風暴的優秀開端~

現在讓我們假設,作爲英雄總部,我們計劃基於這個場景構建一個自動預警系統,從而讓整個預警過程更加智能更加順暢,那我們 IT 民工該怎麼和總部一起設計這個系統呢?

當開啓事件風暴,第一件事情是必須把自己的視角切換到自動預警系統的設計師這個角色上來,謹記,我們關注的是這個系統在這個場景下應該怎麼運作,系統以外的細節我們可以暫且忽略。換而言之,“自動預警” 就應該是核心域。

在正統的事件風暴過程中:

當然,如果在做的過程中發現這樣連起來想不清楚,那就還原基本步,按照原來的事件 -> 命令這樣小步走就好了.

下面是我自己設計的命令風暴,結果跟大家在互動區設計的還是差不多的。(我這個貼法跟正宗的有點不一樣,主要是爲了糊牆的時候省地方)

風暴中,有 “預警通知”、“警報”、“升級預警通知”,有童鞋會問是不是可以統一叫“通知”,這個其實也是統一語言和對業務的理解問題,如果覺得三個場景都是發送一樣的通知就可以了,那統一叫“預警通知” 是個不錯的選擇,但如果希望每次發送的內容都不一樣,那還是得取個不一樣的名字方便後續辨認區分。

過程中,比如開會怎麼商量,作戰計劃怎麼執行,這些其實不是這個預警系統關注的事情,所以不需要進一步展開.

Step 2. 識別業務對象

簡單來說,就是要找出之前那個” 決策 / 命令 “打算要操作什麼東西?或者說那個 “事件” 裏面“XX 已 YY“的 XX 說的是什麼。

如果第一步是嚴格按照 “XX 已 YY” 的寫法進行,這裏應該難度不是特別大。

當然,如果在第一步裏面把一些查詢或者打開頁面這類的動作也放進命令風暴的話,有可能那些步驟會找不出一個業務對象,或者就成爲 “XX 頁面”。這也是爲什麼通常在命令風暴中不考慮一些查詢動作的原因,打開頁面的動作並沒有實際改變什麼東西的狀態。

Step3. 分析業務對象生命週期

在通常的事件風暴介紹中,“分析生命週期” 經常就是一句話帶過,但這裏我會建議大家顯式地把生命週期畫出來,這樣對於後續分辨聚合根 / 實體 / 值對象會很有幫助。

有一些信息只出現了一次,所以畫出來就成了一個點,明顯的這些可以先歸爲值對象,因爲他們只是某個值,而沒有生命週期,不需要 id 之類的標識。

另一類是一條線段,可見他們是有生命週期的,期間是帶有狀態的,這些就是傳說中的實體了。

那哪些是聚合根呢?

所以,看生命週期還得全面的看,在集合了多個場景之後纔會比較準確。當然,裏面也會有一些業務常識在,比如 “會議” 如果一開始我們就選擇了 Zoom 之類的外部系統實現,那很明顯它就應該獨立出去自己聚合了。

Step4.

這裏第四步包括了兩部分:聚合細化 & 上下文分析,這兩部分其實是相輔相成的,並沒有絕對的順序,有時候還會根據其中一步的分析結果來回調整另一步,所以這裏我把它們歸到一起。

Step4a. 細化聚合根分析

這裏我們先假設,會議有其他場景也用到,所以它屬於另一個聚合。

那下面我們就可以把上面的業務對象按照聚合的方式細化分析他們之間的關係了。並可以補充上一些關鍵的屬性

Step4b. 識別上下文和調用關係

同理也可以劃分出上下文以及他們之間的調用關係。(這裏的 U 我是指消費者 / 調用方,而 D 是生產者 / 被調用方)

留意,這裏說的是上下文,也就是業務邊界,它跟服務劃分並沒有絕對的關係。

要問如果對應到服務劃分,其實我們還得多看幾個維度綜合考慮,比如:

至此,從用戶旅程的一個場景,到業務領域的劃分就完成了 ^_^

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/rpofTb88qLNKhBZaMhg6cQ