瞭解了DDD的好處與基本的核心組件後,咱們先不急着進入支持DDD思想的輕量級框架開發,也不急於直銷系統需求分析和具體代碼實現,咱們還少一塊,那就是經典DDD的架構,只有瞭解了經典DDD的架構,你才能知道具體在哪層要實現哪些功能,編寫哪些代碼,具體在開發DDD的輕量級框架與具體模塊代碼實現時,才能作到有的放矢。前端
在這裏須要說明的是,咱們的大健康行業直銷系統有必定的業務複雜性,沒有高併發、高性能的需求,因此不管是經銷商上下文、產品上下文仍是訂單上下文的具體實現,咱們都將遵循經典DDD架構,而不是CRUD簡單方式或CQRS DDD架構的方式。數據庫
a.經常使用工具、支撐功能:這個.netcore項目至少要實現如下的功能:Json配置文件的讀取、WebApi返回給前端的基本格式對象的定義、Json序列化與反序列化、加密功能、依賴注入框架的二次封裝等。json
b.支持DDD框架:這個.net core 項目至少要實現如下的功能:聚合根接口定義、實體接口定義、值對象接口定義、倉儲接口定義、倉儲接口的EF Core頂層實現(工做單元模式)。微信
c.聚合根倉儲實現:這個.netcore項目嚴格來說其實不屬於基礎結構層部分,只是因爲習慣,把它放到基礎結構層這個解決方案文件夾中。它實際上是引用了領域層的領域對象,而且 從領域層對應的聚合根倉儲接口中繼承,而後實現領域對象持久化到數據庫,這樣,倉儲實現是依賴衣領對象,領域對象與領域邏輯就不須要依賴倉儲。領域模型纔是系統真正的核心。架構
a.首先要實現這個界限上下文的領域對象的POCO模型。併發
b.而後針對這個界限上下文的全部領域對象,創建每一個領域對象本身的業務邏輯,注意的是,領域對象的業務邏輯最好不與倉儲直接發生交互,就算領域邏輯要臨時查詢數據庫也不要這樣。框架
c.定義該界限上下文聚合根的倉儲接口,這個接口表明的是聚合根與持久化打交道的基礎約束,具體實現仍是在基礎結構層的聚合根倉儲中實現,這樣就實現瞭解耦。把聚合根倉儲接口定義在領域層的意義是能夠爲領域層的調用方-應用服務層的用例提供對聚合持久化支持。高併發
d.定義該界限上下文的EF Core上下文接口並實現,這樣就經過映射關係,EF Core就能夠處理領域對象與數據庫表之間的映射了。工具
a.某個上下文的應用服務層的某個用例,經過調用領域對象的領域邏輯,完成相關領域邏輯的實現性能
b.領域邏輯完成後,應用服務層用例調用領域層的聚合根的倉儲接口的方法,完成領域對象的預持久化。(應用服務經過基礎結構層的依賴注入框架與Json配置文件找到聚合根倉儲接口對應的實現)
c.應用服務層用例而後調用基礎結構層的EFCore倉儲接口的工做單元方式,完成真正的持久化。(應用服務經過基礎接口層的依賴注入框架與Json配置文件找到頂層倉儲接口對應的工做單元實現)
d.用例返回給接口層須要的前端所需的json對象格式。
a.只須要調用應用服務層用例
b.向前端返回所需的json對象格式
從上述架構特色能夠看出,聚合根的倉儲與領域邏輯徹底解耦,是經過應用服務層的用例將他們協調起來完成功能。
DDD實戰進階視頻請關注微信公衆號:MSSHCJ