天天看點

03|領域驅動設計:領域驅動設計過程

作者:極分享
03|領域驅動設計:領域驅動設計過程

事件風暴:在進行領域驅動設計過程中主要由領域專家與開發團隊配合完成,領域專家與開發團隊經過不斷地對業務需求進行交流(開會進行事件風暴),識别業務核心需求,得出清晰的問題空間,然後提煉業務知識概念,定義出統一業務語言。

戰略設計:之後對問題空間進行分析評估,進行模組化和邊界劃分,定義出核心域與其它子域的限界上下文,并用上下文映射圖關聯出他們之間的映射關系。然後對以上模組化進行架構劃分,通過分層架構、六邊形架構、整潔架構等架構方法劃分各領域的邏輯編輯與實體邊界。

戰術設計:在戰術設計階段對每一個限界上下文進行分析,識别出其實體、值對象、聚合、領域事件等模型,并以領域模型指導程式的設計與編碼實作。

重構:在實踐過程中若發現新的核心概念以及劃分不合理的地方則進行不斷重構。

03|領域驅動設計:領域驅動設計過程

3.1 事件風暴

是一種快速的設計技術,讓領域專家和開發人員都參與其中,聚焦于業務和業務流程,通過頭腦風暴的方式達成共識。完成統一語言定義、識别限界上下文、劃分子域。

3.2 風暴步驟

1.識别領域事件。通過建立一系列寫在便利貼上的領域事件,快速梳理業務流程。

建立領域事件的基本原則:

  • 在建立領域事件時優先關注的是業務流程,而不是資料及其結構。
  • 把每個領域事件梳理出來,事件名稱以動詞過去式命名,用橘色辨別出來,使其顯得突出,如:TicketCreated;
  • 按時間順序從左到右列排領域事件;
  • 按照業務流程,将并發的事件上下排列在一起;
  • 記錄領域事件在業務流程中的問題點;
03|領域驅動設計:領域驅動設計過程

2.識别指令(Command)。建立導緻每個領域事件發生的指令。

通常一條指令的産生是由使用者操作發生的,也有其他系統發生的事情引起的,指令的執行将導緻領域事件的發生。

建立指令的基本原則:

  • 寫下導緻每個領域事件發生的對應的指令名稱,以動詞+名詞形式命名,用淺藍色辨別出來,如:CreateTicket;
  • 按時間順序從左到右列排領域事件;
  • 把指令記錄在它引起的領域事件旁邊;
03|領域驅動設計:領域驅動設計過程

3.識别聚合。

把指令和領域事件通過實體關聯起來。實體就是指令執行和領域事件觸發的資料載體。

建立聚合指南:

  • 業務人員不了解聚合的含義,可以用實體代替,或者直接稱之為資料;
  • 把指令和領域事件分别寫在聚合的左下角和右下角,表明他們是關聯在一起的;
03|領域驅動設計:領域驅動設計過程

4.劃分邊界。

  • 在不同業務人員對相同術語的定義出現沖突時,将此術語劃分在不同邊界中,即不同的團隊劃分在不同邊界;
  • 在重要但不屬于核心域的某個概念出現時,将其劃分在其他邊界中;
  • 使用實線劃分限界上下文邊界,使用虛線劃分子域邊界。

繼續閱讀