展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

ddd:四层架构

  • 风格1
└── demo
    ├── application    
    |   ├── assembler    # dto与do转换
    |   ├── dto    # 数据传输对象
    |   ├── event
    |   |   ├── publish  # 事件发布
    |   |   └── subscribe  # 事件订阅
    |   |
    |   └── service  
    |       ├── service     # 应用服务接口
    |       └── serviceImpl     # 应用服务实现
    |
    ├── domain    
    |   ├── aggregate1     
    |   |   ├── event    # 存放事件实体,以及事件的具体业务逻辑实现
    |   |   |   ├── publish    # 发布的具体逻辑(接口 + 实现)
    |   |   |   └── subscribe  
    |   |   |
    |   |   ├── model    
    |   |   |   ├── entity    # 实体
    |   |   |   ├── member    # 成员对象,相当于do
    |   |   |   └── do
    |   |   |
    |   |   ├── repository  
    |   |   |   ├── factory    # 工厂(po和do转换)
    |   |   |   └── facade    # 仓储接口
    |   |   |
    |   |   └── service    # 领域服务     
    |   |        ├── domainService    # 领域服务接口
    |   |        └── domainServiceImpl    # 领域服务实现
    |   |
    |   ├── aggregate2     # 聚合2
    |   └── aggregate3
    |
    ├── infrastructure    
    |   ├── config    # 全局配置
    |   ├── constant    # 常量
    |   ├── common    # 存放消息、数据库、缓存、文件、总线、网关、公用的常量、方法、枚举等
    |   ├── exception   # 自定义异常
    |   ├── jpa     # 持久层
    |   |   ├── assembler   
    |   |   ├── mapper   # 持久层
    |   |   ├── po   # 持久对象
    |   |   └── repository  # 仓储实现
    |   |       ├── mysql       # 仓储实现
    |   |       ├── redis       # 仓储实现
    |   |       └── post        # 仓储实现
    |   |
    |   ├── tool    # 全局id生成工具等
    |   └── util    # 工具
    |
    └── interfaces    
        ├── validator   # dto校验规则
        ├── handler   # 全局异常处理
        ├── assembler       # dto转为do
        ├── vo     # 视图模型(根据需求引入VO, PO, DTO, DO)
        └── facade    # 接口
  • 风格2
└── demo2
    ├── application    
    |   ├── assembler    
    |   ├── dto    
    |   ├── event
    |   |   ├── publish  
    |   |   └── subscribe 
    |   |
    |   └── service     # 应用服务
    |       ├── context1     # 按限界上下文划分
    |       |   ├── service
    |       |   └── serviceImpl 
    |       |     
    |       ├── context2     
    |       └── context3     
    |       
    ├── domain    
    |   ├── aggregate1     
    |   |   ├── event    
    |   |   |   ├── publish    
    |   |   |   └── subscribe  
    |   |   |
    |   |   ├── model    
    |   |   |   ├── entity    
    |   |   |   ├── member    
    |   |   |   └── do
    |   |   |
    |   |   ├── repository  
    |   |   |   ├── factory    
    |   |   |   └── facade    
    |   |   |
    |   |   └── service     
    |   |        ├── domainService    
    |   |        └── domainServiceImpl    
    |   |
    |   ├── aggregate2     
    |   └── aggregate3
    |
    ├── infrastructure    
    |   ├── config    
    |   ├── constant    
    |   ├── common    
    |   ├── exception   
    |   ├── jpa     
    |   |   ├── assembler   
    |   |   ├── mapper   # 持久层
    |   |   ├── po   
    |   |   └── repository  # 仓储实现
    |   |       ├── mysql       
    |   |       ├── redis      
    |   |       └── post       
    |   |
    |   ├── tool    
    |   └── util   
    |
    └── interfaces   
       ├── context1     # 按限界上下文划分
       |   ├── validator   
       |   ├── handler   
       |   ├── controller     # 接口
       |   ├── vo     # dto、vo
       |   └── wrapper     # dto转do
       |
       ├── context2     
       └── context3        
  • 补充
# 通常情况下执行逻辑(业务不复杂):controller -> 应用服务 -> 仓储 -> 持久层
# 业务复杂时:展现层 -> 应用服务 -> 领域服务 -> 仓储 -> 持久层
# 每层对应不同的对象(展现层vo、应用层dto、领域层do、持久层po),中间隔了dto是为了vo与do解耦
# 持久化操作应该放在基础层
# member相当于do
# 按照DDD分层架构,仓储实现的部分应该属于基础层代码
# 仓储为了解耦领域逻辑和数据处理逻辑,在中间加了薄薄的一层仓储,相当于只是过渡的作用
  • 拓展
validator验证注解   
docker compose
posted @ 2022-06-22 22:42  DogLeftover  阅读(236)  评论(0编辑  收藏  举报