iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0

什麼是 DDD?

DDD(Domain-Driven Design)是一種專注於解決複雜業務系統的設計方法。核心理念是通過理解業務需求來驅動系統設計,使結構更清晰、功能更合理。DDD 強調分解大型系統中的業務領域,使其更適合微服務架構。DDD 是一個不小的主題,這邊先簡單寫上重點,後續會以實作的方式來做介紹。

Strategic Design

策略設計專注於將需求拆解為子域(subdomains),使用 Event Storming 等方法發現問題,並劃分為核心子域、支撐子域與通用子域。Context Map 可清晰定義這些子域之間的邊界,避免設計混亂。

Bounded Context 與 Aggregate

Bounded Context 定義業務邊界,確保每個子域的模型和邏輯獨立運行。在 Bounded Context 中,使用通用語言(Ubiquitous Language)保持開發與業務專家之間的溝通一致性。

Aggregate 是 DDD 中用來將相關物件(Entity 和 Value Object)組合在一起的模式,由 Aggregate Root 管理,確保數據一致性。所有操作必須通過 Aggregate Root 進行。

Entity、Aggregate 與 Value Object

  • Entity:具有唯一標識符,狀態隨時間變化,表示具有生命周期的業務對象(如用戶、訂單)。
  • Value Object:不具唯一標識,基於屬性比較,且不可變(如地址、貨幣金額)。它們經常嵌入在實體中表示細節。
  • Aggregate:由多個 Entity 和 Value Object 組成,通過 Aggregate Root 統一管理。外部只能通過 Aggregate Root 來操作 Aggregate,避免數據不一致。

Tactical Design

DDD 也涵蓋技術層面的實現,使用設計模式(如 Aggregate、Repository、Factory、EventHub)來實現子域的業務需求,確保系統的健壯性與可擴展性。而 Aggregate 則是 Tactical Design 的核心概念,定義了如何將一組相關的業務對象(如 Entity 和 Value Object)組合成一個不可分割的單位。Aggregate 通過 Aggregate Root 來管理內部的 Entity,並確保所有的操作都經由 Aggregate Root 進行。這樣的設計模式有助於控制數據的一致性,防止系統中的其他部分隨意修改 Aggregate 中的數據。

結論

DDD 提供了一個以業務為核心的設計框架,Aggregate 的引入確保了數據一致性與業務邏輯的集中管理。通過設置明確的邊界和責任劃分,DDD 讓開發者能夠更好地處理複雜的業務邏輯,並通過 Aggregate 的使用來促進系統的高內聚和低耦合。

DDD 實作分為兩大部分:

  • Strategic Design:拆解需求,定義 Bounded Context 和子域互動。
  • Tactical Design:使用設計模式實現子域需求,Aggregate 是保障數據一致性的核心。

最後,再次強調,Aggregate 的概念十分重要,後續的實作將圍繞著它來開發。


上一篇
Day 02 - 微服務架構:從單體到分散式的演進、優勢與挑戰
下一篇
Day 04 - Clean Architecture 與 DDD 的架構設計
系列文
DDD? Clean Architecture? Microservices? 帶你用.NET實作打造一個現代化微服務!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言