可以促進微服務設計的DDD事件風暴建模技巧 - Nick Tune
EventStorming是一種非常流行的技術,它使我們比傳統技術更有效地探索,分析和建模業務領域。由此我們可以建立與設計更好的軟體系統和問題解決方案。
明智地使用EventStorming,我們可以發現有關我們的域和業務的足夠資訊,以便我們可以使用它來設計微服務,有界上下文甚至我們的團隊組織。
在公共培訓課程中和為客戶私下舉辦過許多EventStorming會議之後,我們注意到,可以將EventStorming應用於次優狀態,從而使人們質疑其價值,並使他們感到浪費時間。
另一方面,有效地應用EventStorming時,我們已經看到了許多成功的會議,其中許多團隊已將EventStorming用作其微服務設計的基礎。
在本文中,我們將分享一些易於學習的技術,這些技術將幫助您充分利用EventStorming的功能,從而可以設計更多與領域保持一致的軟體系統。
1.避免過早抽象
EventStorming開始時可能會採取的錯誤做法之一是建模過高。在許多EventStorming會話中,通過在更深層次上對域進行建模,可以釋放出殺手級領域的見解。在這裡,您可以打破幻想,檢驗假設並瞭解您的領域的實際運作方式。這使您能夠從單純的軟體模型擴充套件到真正的域驅動設計。
以線上職位公告板為例:
招聘人員登入系統、建立了招聘要求、釋出招聘、求職者申請職位、面試安排。
域就是這樣工作的,它是如此簡單,也是很膚淺的抽象,對我們沒有任何幫助。這個建模事件太普通了,太通用了,是一種抽象了的通用流程,並不是具體化。
2.從特定方案開始
為避免過早抽象,請從建模單個粒度流開始。例如,特定型別的使用者在特定時間以特定價格購買特定產品。
對單個流建模之後,在流中查詢子分支,然後分解為相鄰的流。
在上面職位釋出領域案例中,我們可以從外部招聘者註冊釋出職位開始建模。針對購買大型招聘計劃的外部招聘人員,然後針對購買輕型招聘計劃的外部招聘人員。
我們需要根據要招聘的業務來組織招聘廣告。而且,招聘政策有一個意見:如果您要招募多家公司來你這裡招聘,則必須採用不同的招聘模式,這會影響您的計費方式以及收到的報告的型別。
特定的招聘流程是這樣的:
外部招聘人員登入系統、分別購買大型招聘計劃和輕型招聘計劃、根據大型和輕量招聘策略將相應要求發給招聘者、招聘人員挑選一些。
外部招聘人員要遵守不同的招聘計劃,需要特殊的工具來組織其工作,需要不同的報告型別,在進行這樣更細化的建模時,您將開始看到流程分支,輸入,輸出以及各種方式的處理模式。
發現領域中極為重要的線索:自然所有和共同變化的部件,這些部件看起來相同,但關係鬆散得多。這是資訊的型別,是架構域驅動軟體系統的關鍵。
3.捕捉隱藏的意圖
我們看到許多初學者在將Form Submitted表單提交事件新增到他們的EventStorm時犯了錯誤。這不是領域事件,而是領域事件的技術實現。重要的是為什麼要提交表單:使用者的意圖是什麼?
除了使用Form Submitted之外,您還可以新增更多以域為中心的名稱,例如Job Post。
不要寫的技術事件:表單提交、按鈕點按、資料庫儲存;
業務事件的領域術語:廣告發布;工作陳列;支付接受。
後者才是領域術語,但仍然不夠。在為您的域中的資料提交建模時,可以使用以下技術來獲取更深入的域見解:
- 列出每個單獨的資料(即表單上的每個欄位)
- 列舉每個資料的可能值
- 瞭解不同值的意義
- 將重大差異建模為單獨的流程
可以通過一個示例更好地證明這一點:釋出工作時,表單提交中包含以下欄位:就業型別。它可以是永久或合同。該選擇具有很高的領域意義,導致業務流程發生變化,從而影響業務成果。
因此,在這種情況下,可能有兩個事件更好:永久職位釋出,合同職位釋出。然後為每個流程建模-尋找流程中的差異並尋找相似之處。您將獲得大量有關設計系統(尤其是設計微服務邊界)的最佳方法的見解。
4.懷疑警惕CRUD命名
具有通用字尾(例如Created,Updated,Changed,Changed或Deleted)的事件表示您正在使用技術術語來描述您的域而不是真實的域術語。
更新Updated可能是最大的警告訊號。更新是一個非常籠統的術語,基本上意味著已更改。當我們使用EventStorming時,我們試圖捕獲我們領域的豐富性,因此我們應該問“為什麼更新了某些內容?”。
對CRUD命名的懷疑不僅會幫助您開發更豐富的領域詞彙表,從而改善技術從業者與領域專家之間的協作,而且還將幫助您發現域內的其他流程。瞭解更改的每個不同原因,您將發現許多領域的見解。
例如取代”價格更改“,你可能會發現“價格折扣”,“最終季售價","聖誕促銷價啟用"或別的東西。
5.尋找狀態機和關鍵事件
狀態機幾乎遍佈每個領域。我們正在建模的概念經歷了不同的生命週期階段,即它們的狀態。
如果您特別注重查詢狀態機,那麼在發現域中的邊界(將成為微服務的邊界)方面會獲得更大的成功。
有一種特殊的事件可以識別狀態機狀態之間的轉換,稱為“關鍵事件”。關鍵事件是域邊界的有力指標。
在物聯網裝置領域,我們可能會發生以下關鍵事件:裝置製造,已配置裝置,已安裝裝置和已啟用裝置。儘管在整個過程中發生了數以百計的事件(例如,將裝置從倉庫中移出並安裝在公共場所),但這幾種關鍵事件是指示重大變化的關鍵業務事件。
6.到處問“如果?”
很容易陷入僅對域中常見路徑或快樂路徑場景建模的陷阱。但是,通過探索所有邊緣情況,還有很多東西要學習。
要梳理您域中的邊緣情況,請檢視牆上的每個事件並詢問“什麼?”。“如果發生停電怎麼辦?”,“如果拒絕客戶的信用卡怎麼辦?”,“如果倉庫發生火災怎麼辦?”。
對該領域具有濃厚的好奇心和好奇心,將帶您提出探索性和挑戰性的問題。這將帶您獲得有關該域的許多見解。
7.如果團隊正在困惑,請切換到單執行緒模式
混亂的探索是EventStorming的標誌之一,整個團隊都在這裡集體集思廣益。每個人都可以隨意將自己的想法,假設和疑慮用便籤貼在牆上。
混亂的探索對於EventStorming提供的許多發現至關重要。但是,有時精力不足,團隊感到困惑,或者由於許多可能的原因之一而沒有取得進展。你能為這個做什麼?
雖然在其他人觀看的同時只有一個人將便籤放在牆上是一種反模式,但是這種稱為單執行緒EventStorming的方法可以有效地幫助團隊達成一致並建立團隊動量。
此模式有一些變體,但是您可以嘗試以下方法:
- 選一個人將便籤貼在牆上
- 其他人圍坐在他周圍
- 選擇一個特定的用例模型
- 繼續努力,一次新增一個事件,以確保小組在繼續之前達成共識。如果小組陷入僵局,請做筆記並稍後返回
- 如果還有其他疑問或疑慮,請記錄下來,稍後再返回-保持進度前進
在簡短的單執行緒會話之後,該小組將有許多想法和他們想更詳細地建模的其他方案。切換回混沌模式的好時機。
掌握事件儲存和微服務設計
瞭解您的業務領域是設計最佳軟體系統的關鍵。因此,提高對業務域進行建模的能力將增強您作為系統設計師的能力。
EventStorming是可用於對業務域進行建模的最佳工具之一。您對EventStorm的掌握越多,您就能構建出滿足業務需求的軟體系統,從而取得更大的成功。
五分鐘內您將無法掌握MasterStorming。但是,您越早開始學習,越多地練習,就會越快到達那裡。我們希望我們在本文中分享的技巧將有助於加速您的精通學習之路。
(banq評:事件風暴會議本身就是一種探索問題和答案是否存在的各種可能性,突破舒適區,追問原因,擁抱不確定性,用好奇心驅使創新: https://www.jdon.com/53327)
相關文章
- 事件風暴 vs 事件建模事件
- DDD事件風暴的詳細議程事件
- 使用設計畫布發現和建模有界上下文 - Nick Tune
- 領域驅動設計的DDD與ddd - nick
- 事件風暴EventStorming與事件建模EventModeling的區別 | rafalmaciag事件ORMMac
- DDD事件風暴研討會備忘單事件
- GitHub - mariuszgil/awesome-eventstorming: 事件風暴建模工具集GithubORM事件
- DDD之1微服務設計為什麼選擇DDD微服務
- 事件驅動的微服務-事件驅動設計事件微服務
- 使用DDD聚合發現隱藏的業務規則的案例分析:資料庫事務的業務實現 - Nick Tune資料庫
- 微服務設計學習(一)關於微服務和如何建模服務微服務
- 核心領域模式 -Nick Tune模式
- ddd-crew/ddd-starter-modelling-process:DDD設計入門建模流程
- 可落地的DDD(4)-如何利用DDD進行微服務的劃分(2)微服務
- “我開啟潘多拉的盒子” - 採訪DDD事件風暴發明者Alberto Brandolini事件
- 當中臺遇上DDD,我們該如何設計微服務?微服務
- 財務建模最佳實踐 - DDD相關建模
- 通過事件風暴發現業務流程 - Sarah Denayer事件
- 大局事件風暴:尋找差距事件
- 如何實現DDD事件建模的詳細步驟 - goeleven事件Go
- 事件風暴建模中Wardley Maps和團隊拓撲型別對元件的影響 - Markus事件型別元件
- 事件風暴創始人Alberto:團隊拓撲和DDD上下文對映的關係事件
- 一個可以自我進化的微服務框架微服務框架
- 事件風暴與領域故事的比較事件
- 微服務事件驅動架構演進微服務事件架構
- 基於COLA架構建立運輸微服務應用和DDD領域建模架構微服務
- DDD領域驅動設計:領域事件事件
- 《風暴英雄》裡那些超棒的遊戲設計遊戲設計
- 微服務設計指南微服務
- 事件風暴 - 分解問題領域的最佳實踐事件
- 根據業務能力實現DDD建模 - trond
- 幽默:神經科學的認知漸進模板用在DDD和微服務上微服務
- 政策促進下,少兒程式設計課的進縣之路程式設計
- 教你玩轉微服務--基於DDD的微服務架構落地實踐之路微服務架構
- 向領域驅動設計前進: 如何使用DDD實現從單體到微服務遷移? -Kevin Mas Ruiz微服務UI
- 微服務架構和設計模式 - DZone微服務微服務架構設計模式
- 人壽保險銷售平臺的領域驅動設計和事件風暴案例分享 -James Hickey事件
- 設計微服務的最佳實踐微服務