天天看點

【領域驅動設計DDD】——初識概念背景何為領域驅動設計DDD中概念講解總結

背景

       随着微服務技術的發展,越來越多的公司開始接入微服務,在微服務的推動過程中,發生了很奇怪的現象,團隊沒有因為技術方案一籌莫展,反而因為微服務到底應該拆多小而争得面紅耳赤,不同的人會根據自己對微服務的了解而拆分出不同的微服務,于是大家各執一詞,誰也說服不了誰,都覺得自己很有道理。随着深入的了解,發現服務的拆分是可以有合适的理論或設計方法來指導微服務設計。

      微服務拆分困境産生的根本原因就是不知道業務或者微服務的邊界到底在什麼地方。

何為領域驅動設計

       2004 年埃裡克·埃文斯(Eric Evans)發表了《領域驅動設計》(Domain-Driven Design –Tackling Complexity in the Heart of Software)這本書,從此領域驅動設計(Domain Driven Design,簡稱 DDD)誕生。DDD 核心思想是通過領域驅動設計方法定義領域模型,進而确定業務和應用邊界,保證業務模型與代碼模型的一緻性。

DDD 包括戰略設計和戰術設計兩部分。

戰略設計主要從業務視角出發,建立業務領域模型,劃分領域邊界,建立通用語言的限界上下文,限界上下文可以作為微服務設計的參考邊界。

戰術設計則從技術視角出發,側重于領域模型的技術實作,完成軟體開發和落地,包括:聚合根、實體、值對象、領域服務、應用服務和資源庫等代碼邏輯的設計和實作。

DDD中概念講解

1、領域

領域就是這個邊界内要解決的業務問題域。

2、子域

是領域的細化,拆分為子域

核心域——業務成功的主要因素和公司的核心競争力

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

支撐域——還有一種功能子域是必需的,但既不包含決定産品和公司核心競争力的功能,也不包含通用功能的子域

3、實體

擁有唯一辨別符,且辨別符在曆經各種狀态變更後仍能保持一緻

4、值對象

通過對象屬性值來識别的對象,它将多個相關屬性組合為一個概念整體

它隻承擔描述實體的作用,并且它的值隻能整體替換,這時候你就可以将位址設計為值對象

5、聚合

能讓實體和值對象協同工作的組織就是聚合

聚合是資料修改和持久化的基本單元,每一個聚合對應一個倉儲,實作資料的持久化。

6、聚合根

每個聚合中隻能有一個聚合根

它作為實體本身,擁有實體的屬性和業務行為,實作自身的業務邏輯

它作為聚合的管理者,在聚合内部負責協調實體和值對象按照固定的業務規則協同完成共同的業務邏輯。

聚合根在聚合中的作用

聚合之間通過聚合根 ID 關聯引用,如果需要通路其它聚合的實體,就要先通路聚合根,再導航到聚合内部實體,外部對象不能直接通路聚合内實體。

實體可以成為聚合根的判斷條件——是否有獨立的生命周期?是否有全局唯一 ID?是否可以建立或修改其它對象?是否有專門的子產品來管這個實體。

DDD與微服務的關系

DDD 戰略設計會建立領域模型,領域模型可以用于指導微服務的設計和拆分。

【領域驅動設計DDD】——初識概念背景何為領域驅動設計DDD中概念講解總結

用三步來劃定領域模型和微服務的邊界。

第一步:在事件風暴中梳理業務過程中的使用者操作、事件以及外部依賴關系等,根據這些要素梳理出領域實體等領域對象。

第二步:根據領域實體之間的業務關聯性,将業務緊密相關的實體進行組合形成聚合,同時确定聚合中的聚合根、值對象和實體。在這個圖裡,聚合之間的邊界是第一層邊界,它們在同一個微服務執行個體中運作,這個邊界是邏輯邊界,是以用虛線表示。

第三步:根據業務及語義邊界等因素,将一個或者多個聚合劃定在一個限界上下文内,形成領域模型。在這個圖裡,限界上下文之間的邊界是第二層邊界,這一層邊界可能就是未來微服務的邊界,不同限界上下文内的領域邏輯被隔離在不同的微服務執行個體中運作,實體上互相隔離,是以是實體邊界,邊界之間用實線來表示。 

DDD 主要關注:從業務領域視角劃分領域邊界,建構通用語言進行高效溝通,通過業務抽象,建立領域模型,維持業務和代碼的邏輯一緻性。

微服務主要關注:運作時的程序間通信、容錯和故障隔離,實作去中心化資料管理和去中心化服務治理,關注微服務的獨立開發、測試、建構和部署。

總結

面對複雜問題,解決辦法通常是拆分,子產品化,化整為零。

領域驅動模組化DDD是面向業務,對業務領域的劃分和整合,是邏輯層面。微服務是面向實體落地,是對應用的實體形态進行拆分和整合。從軟體工程過程角度看,DDD的戰略設計輸出物,領域模型及劃分的區域,是微服務的輸入,一個區域對應一個微服務,微服務運作架構、平台可以承載所有的微服務,提供微服務統一的運作架構,也就是承載所有的業務領域。

領域驅動與微服務是在軟體不同階段使用的工具,技術或方法論,圍繞一個共同的目标,搭建企業業務中台,企業級業務複用,快速的需求響應能力。

DDD戰略設計得輸出,是微服務的輸入。

繼續閱讀