- src
- it 集成測試模塊
- java 集成測試代碼
- resources 集成測試配置文件
- test 單元測試模塊
- java 單元測試代碼
- main 業務代碼
- java
- interfaces 用戶接口層
- facade 提供較粗粒度的調用接口,將用戶請求委托給一個或多個應用服務進行處理
- rest REST API
- dubbo
- subscribe mq 事件訂閱
注1:統一返回Result
注2:應該捕捉所有異常
- application 應用層
- assembler 實現 DTO 與領域對象之間的相互轉換和數據交換
- event 存放事件相關代碼,為了事件統一管理,將所有事件發布和訂閱統一放到應用層,核心業務邏輯放到領域層
- publish 事件發布
- service 對領域服務或外部應用服務進行封裝、編排和組合,對外提供粗粒度服務
- command 操作相關,必須調用領域層
- query 只放查詢相關,可以直接調用持久層
注1:出參必須為 DTO
注2:入參為 Command 或 Query,唯一例外是單ID查詢的場景
注3:Command 和 Query 有語義作用,避免復用
注4:通過 Spring Validation 來實現入參校驗,減少非業務代碼混雜業務代碼中
- domain 領域層
- aggregate 聚合目錄,按業務名稱命名,如權限聚合
- entity 領域對象
- factory 從其他服務返回結果構建領域對象???
- valueobject
- event 存放事件實體和相關的業務邏輯代碼
- service 存放領域服務代碼
- repository 倉儲,存放所有查詢和持久化領域對象的代碼,通常包括倉儲接口和實現,倉儲實現一般放在基礎層,也可以直接放一起
- infrastructure 基礎層
- config 存放配置相關代碼
- client 存放跨服務接口、DTO
- service
- dto 存放 dto
- command
- query
- response
- common 存放消息、數據庫、緩存、文件、總線、網關、公用的常量、枚舉等
- enums 存放枚舉
- cache 緩存相關服務
- mq mq相關配置
- db 數據庫相關
- mapper 存放 mybatis dao 實現
- repositories 倉儲實現
- po 持久化對象
- converter 用於封裝底層,實現PO與DO一對多或多對多轉換
- perisistence 存放 RepositoryImpl,調用 mapper
- ......
- util 存放平台、開發框架、第三方類庫、通用算法等基礎代碼
- resources 配置文件
變更追蹤
訂單和訂單明細對象,修改其中一個訂單明細,其他數據不操作
場景:非聚合根實體變更操作
修改訂單明細中其中一條價格,這條明細和訂單總價需要變動,其他信息不變
持久化到數據庫時,只需要修改 orderItem_x 條記錄和 order 記錄即可
貧血模式:
會記錄對應的item id ,根據這個ID 更新
充血模式:
需要自己做對比,變更跟蹤
解決方案:(待測試)
aggregate-persistence