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

本系列文章html

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

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

 

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

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

 

一.什麼是領域驅動設計(DDD)框架

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

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

 

二.爲何使用DDD性能

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

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

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

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

 

三.DDD核心組件

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

2.實體:有業務生命週期,採用業務標識符進行跟蹤。好比一個訂單就是實體,訂單有生命週期的,並且有一個訂單號惟一的標識它本身,若是兩個訂單全部屬性值所有相同,但訂單號不一樣,也是不一樣的實體。

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

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

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

6.聚合根:將聚合中表達總概念的實體作成聚合根,好比訂單實體就是聚合根,對聚合中全部實體的狀態變動必須通過聚合根,由於聚合根協調了整個聚合的邏輯,保證一致性。固然其餘實體能夠被外部直接臨時查詢調用。

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

8.倉儲:用於對聚合進行持久化,一般爲每一個聚合根配備一個倉儲便可。倉儲可以很好的解耦領域邏輯與數據庫。

9.工廠:用於建立複雜的領域對象,可以將領域對象複雜的建立過程保護起來。

 

QQ討論羣:309287205 

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

相關文章
相關標籤/搜索