天天看點

DDD-領域驅動設計

1. 名詞解釋

領域、子域、核心域、通用域、支撐域、限界上下文、實體、值對象、聚合、聚合根

核心域:決定産品和公司核心競争力的子域

通用域:沒有太多個性化訴求,同時被多個子域使用的通用功能子域;

支撐域:必需的,但既不是公司核心,也不含通用功能的子域;

實體:有唯一辨別,可修改的。個人了解就是一個對象包含了很多JAVA代碼中的基礎類型的字段,當然這個對象可以包含複雜對象,也就是下面的值對象,例如一個Person類,包含姓名(String)、年齡(Integer)、性别(Integer)、位址(Address),這個位址就是一個值對象;

值對象:無唯一表示,不可修改的(一旦修改了,就不再是原來那味了)個人了解就是JAVA代碼中的複雜對象,就是上面示例的位址對象;

2. 劃定領域模型和微服務的邊界

  • 第一步:在事件風暴中梳理業務過程中的使用者操作、時間以及外部依賴關系等,根據這些要素梳理出領域實體等領域對象。
  • 第二步:根據領域實體之間的業務關聯性,将業務緊密相關的實體進行組合形成聚合,同時确定聚合中的聚合根、值對象和實體。在這個圖裡,聚合之間的邊界是第一層邊界,他們在同一個微服務執行個體中運作,這個邊界是邏輯邊界,是以用虛線表示。
  • 第三步:根據業務及語義邊界等因素,将一個或者多個聚合劃定在一個限界上下文内,形成領域模型。在這個圖裡,限界上下文之間的邊界是第二層邊界,這一層邊界可能就是未來微服務的邊界,不同限界上下文内的領域邏輯被隔離在不同的微服務執行個體中運作,實體上互相隔離,是以是實體邊界,用實線表示。

3. 設計步驟

(1)提煉問題域

例如一個線上拍賣系統,首先是一個非常大的概念

DDD-領域驅動設計

(2)分界問題域

以各個次元去拆分成子域。例如會員身份是表示會員注冊、喜好和詳細資訊的系統區域;賣家則是處理賣家活動的過程和行為;拍賣是處理拍賣時間計劃管理以及競價活動的問題域;名冊是拍賣網站上目前提供的物品目錄;争議解決是處理會員與賣家之間的糾紛。

DDD-領域驅動設計

(3)确定子域類型

劃分好子域後,确定子域是通用域、核心域還是支撐域,以便了解産品的業務價值。

DDD-領域驅動設計

【未完待續】

參考資料:

【領域驅動設計模式、原理與實踐】

【DDD學習筆記 - 基礎篇(Ⅰ)】

【DDD學習筆記 - 基礎篇(Ⅱ)】

繼續閱讀