一、一級代碼目錄
前面《DDD—分層架構,洋蔥架構,六邊形架構》一文中講到,領域模型的業務邏輯從領域層,應用層到用戶接口層逐層組合和封裝,對外提供靈活的服務,既實現了各層的分工和解耦,也實現了各層的協作,DDD分層架構是微服務代碼結構的最佳落地。

根據DDD的分層架構,我們可以首先根據各層的單一職責定義一級目錄(各層具體的職責見《DDD—分層架構,洋蔥架構,六邊形架構》)如下圖:
interfaces:用戶接口層
application:應用層
domain:領域層
infrastructure:基礎層
二、各層代碼目錄
用戶接口層:interfaces目錄下的代碼目錄結構有assembler,dto和facade三類
assembler:實現前端傳輸數據到后端的載體DTO和DO領域對象的轉換,assembler都是和DTO和DO一起出現
dto:前端傳輸數據到后端的載體,不實現任何業務邏輯
facade:封裝應用服務,提供粗粒度的調用接口
應用層:application目錄下的代碼目錄結構有event的訂閱和發布,編排領域層的應用service,同時應用層負責與外部微服務交互,可能有DTO和DO的轉換過程,需要Assembler的參與
event.publish:存放事件發布的代碼
event.subscribe:存放事件訂閱的代碼
service:應用服務,對多個領域服務和外部微服務調用的封裝,編排和組合,對用戶接口層提供流程上的核心業務邏輯
領域層:domain目錄下是由一個或多個獨立的聚合目錄構成,每一個聚合是一個獨立的業務功能單元,多個聚合共同實現領域模型的核心業務邏輯,聚合文件夾可以以聚合名稱命名,聚合內包含entity,event,repository和service四個子目錄。
entity:存放聚合根,實體和值對象
event:存放事件實體,以及事件的具體業務邏輯實現
service:存放跨聚合編排的領域服務,以及PO和DO轉換和初始化用的工廠
repository:一個聚合只能有一個倉儲,倉儲一般包含倉儲接口和倉儲實現。同事倉儲還會有DAO代碼的具體實現
基礎層:主要存放配置信息config和各種第三工具,API,組件集成的工具類utils
領域模型映射成微服務代碼結構的最終目錄組織結構如下:
參考書籍 ——《基於DDD和微服務的中台架構與實現》歐創新、鄧頔
參考書籍 ——《領域驅動設計》Eric Evans
參考書籍 ——《架構真經》Martin L. Abbott
