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
posted @ 2020-03-11 15:55  MarkLogZhu  阅读(2691)  评论(0编辑  收藏  举报