三層架構到DDD分層架構的演變

參考極客時間《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 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章