DDD實戰進階第一波(二):開發一般業務的大健康行業直銷系統(搭建支持DDD的輕量級框架一)


本系列文章

DDD實戰進階第一波(一):開發一般業務的大健康行業直銷系統(概述)

DDD實戰進階第一波(二):開發一般業務的大健康行業直銷系統(搭建支持DDD的輕量級框架一)

 

要實現軟件設計、軟件開發在一個統一的思想、統一的節奏下進行,就應該有一個輕量級的框架對開發過程與代碼編寫做一定的約束。

雖然DDD是一個軟件開發的方法,而不是具體的技術或框架,但擁有一個輕量級的框架仍然是必要的,為了開發一個支持DDD的框架,首先需要理解DDD的基本概念和核心的組件。

 

一.什么是領域驅動設計(DDD)

 首先要知道DDD是一種開發理念,核心是維護一個反應領域概念的模型(領域模型是軟件最核心的部分,反應了軟件的業務本質),然后通過大量模式來指導模型設計與開發。

DDD的一般過程是:首先通過軟件需求規格說明書或原型生成一個領域模型(類、類的屬性、類與類之間的關系);然后根據模式(應該如何分層?、領域邏輯寫在哪?與持久化如何交互?如何協調多對象領域邏輯?如何實現邏輯與數據存儲解耦等)指導來實現代碼模型。

 

二.為什么使用DDD

DDD能應對復雜性與快速變化:

1.從技術維度實現分層:能夠在每層關注自己的事情,比如領域層關注業務邏輯的事情,倉儲關注持久化數據的事情,應用服務層關注用例的事情,接口層關注暴露給前端的事情。

2.業務維度:通過將大系統划分層多個上下文,可以讓不同團隊和不同人只關注當前上下文的開發。

3.時間維度:通過敏捷式迭代快速驗證,快速修正。

 

三.DDD核心組件

1.界限上下文:首先要將大系統划分層多個界限上下文,比如大健康行業直銷系統可以划分為產品、經銷商、訂單等幾個界限上下文,每個界限上下文有自己的領域邏輯、數據持久化、用例、接口等。每個界限上下文根據特點,具體實現方式又不同,比如有些界限上下文基本沒有業務邏輯,就是增刪改查,則可以使用CRUD最簡單的模式;有些界限上線文有一定的業務邏輯,但對高並發、高性能沒要求,則可以使用經典DDD模式;有些界限上下文有一定的業務邏輯,而且有高性能要求,則可以使CQRS模式。

2.實體:有業務生命周期,采用業務標識符進行跟蹤。比如一個訂單就是實體,訂單有生命周期的,而且有一個訂單號唯一的標識它自己,如果兩個訂單所有屬性值全部相同,但訂單號不同,也是不同的實體。

3.值對象:無業務生命周期,無業務標識符,通常用於模式實體。比如訂單的收貨地址、訂單支付的金額等就是值對象。

4.服務:無狀態,有行為,通常就是一個用例來協調多個領域邏輯完成功能。

5.聚合:通常將多個實體和值對象組合到一個聚合中來表達一個完整的概念,比如訂單實體、訂單明細實體、訂單金額值對象就代表一個完整的訂單概念,而且生命周期是相同的,並且需要統一持久化到數據庫中。

6.聚合根:將聚合中表達總概念的實體做成聚合根,比如訂單實體就是聚合根,對聚合中所有實體的狀態變更必須經過聚合根,因為聚合根協調了整個聚合的邏輯,保證一致性。當然其他實體可以被外部直接臨時查詢調用。

7.服務:協調聚合之間的業務邏輯,並且完成用例。

8.倉儲:用於對聚合進行持久化,通常為每個聚合根配備一個倉儲即可。倉儲能夠很好的解耦領域邏輯與數據庫。

9.工廠:用於創建復雜的領域對象,能夠將領域對象復雜的創建過程保護起來。

 

QQ討論群:309287205 

DDD實戰進階視頻請關注微信公眾號:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM