└── 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 # 接口
└── 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