DDD目錄結構


- 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM