參考極客時間《DDD實戰》
三層架構
傳統的三層架構主要分爲業務接口層、業務邏輯層、數據訪問層
- 業務接口層:主要是API的定義,包括資源路徑定義、請求報文接受、響應報文返回、請求編碼等定義的內容;
- 業務邏輯層:主要做業務邏輯處理,這一層包括數據映射DTO轉VO,業務核心邏輯編寫,組合不同數據倉庫,做業務邏輯;
- 數據訪問層:主要做數據存儲,包括數據映射VO轉PO,數據接口的定義,映射XML的編寫。
DDD分層架構
DDD分層架構也可以叫四層架構,主要由用戶接口層、應用層、領域層、基礎層;
- 用戶接口層:負責向用戶顯示信息和解釋用戶指令,比如用戶、程序、自動化腳本、批處理腳本等;
- 應用層:主要用於協調多個聚合的服務和領域對象完成服務編排和組合,可以調本地也可以調遠程的服務、包括權限驗證、事務控制、防重冪等,不要把核心的業務邏輯放到這裏;
- 領域層:實現核心邏輯,包括聚合根、實體、值對象、領域服務,包括業務擴展點、校驗規則、組合聚合服務等相關功能;
- 基礎層:提供通用的技術和基礎服務,包括一些第三方工具類、緩存、數據庫、文件等,採用依賴倒置的設計,於其他層解耦。
演變
三層架構向DDD架構演變,主要發生在邏輯層和數據庫訪問層
- 新增DTO,給前端數據可用性更高,更靈活;
- 三層架構的業務邏輯層改爲應用層和領域層,使得業務邏輯不混亂,應用快速響應前端的變化;
- 基礎層和數據訪問層的設計變化,通過依賴倒置實現基礎設置對基礎資源的解耦,應對主流技術的變化。
項目結構
用戶接口層
- Assembler:DTO與實體對象相互轉換和數據交換,與DTO同時出現;
- Dto:數據傳輸載體,DTO可以將領域對象與外界隔離;
- Facade:粗接口粒度定義,將請求給多個應用服務處理;
應用層
- event: 主要存放事件相關代碼,包括兩個子目錄publish和subscribe,放發佈訂閱相關代碼,這裏可以領不同領域服務訂閱也可以是微服務之間的訂閱;
- service:應用服務,主要對外部的服務進行封裝、編排和封裝,提供粗粒度的服務,也是一段獨立的業務邏輯
領域層
- Aggregate:聚合軟件包的根目錄,根據聚合的名稱命名,裏面可以定義實體、聚合根、實體、值對象以及領域服務,可以獨立拆分成微服務;
- Entity:存放聚合根、實體、值對象、工廠模式相關 代碼,統一實體的相關邏輯,都放在該類中,採用充血模式;
- Event:存放事件實體以及事件活動相關的邏輯代碼;
- Service:領域服務,根據不同的實體組合的業務邏輯;
- Repository:存放聚合查詢和持久化領域對象的代碼;
基礎層
- Config:主要存放配置相關代碼,比如springboot自動配置內和集成第三方組件的配置;
- Util:主要存放平臺、開發框架、消息、數據庫、緩存、文件、總線、網關、第三方類庫、通用算法等基礎代碼,你可以爲不同的資源類別建立不同的子目錄;
示例代碼
https://github.com/itrickzhang/ddd-demo1
本文由博客一文多發平臺 OpenWrite 發佈!