ddd分层
myddd遵照领域驱动编码思想,其分层设计如下:
总述
对于任何一个遵守领域驱动思想的编码模式来说,其分层一定包含以下几层:
- 领域层
- 应用层
- UI/协议层
- 基础设施层
它们分别负担不同的职责与任务,共同分工与合作。
领域层
领域层为业务所在最核心的层,所有业务的逻辑,应该都在领域层。
领域层只允许出现以下概念
- 领域实体
- 值对象
- 仓储接口
- 领域服务
- 领域事件
领域层禁止依赖具体技术框架,对任何具体技术的需要,都需要以接口的方式隔离。由基础设施层提供实现。参考领域层编码规范中的仓储规范说明。
如果你在领域层发现类似hibernate的代码,或操作redis的客户端代码,这意味着这是有问题的。你应该做的是抽象出对应的接口,由基础设施层来提供实现。
应用层
应用层分为接口与实现。
应用层允许出现以下概念
- DTO
- 数据组装
- 应用接口与实现
应用层的最大特点是它是很薄的一层,它绝大部分功能在于数据封装与隔离,将领域层的数据模型使用DTO隔离开来。
UI/协议层
这一层很好理解,可能是UI,当然它的含义也可以很广,对于一个REST API服务来说,类似Controller这样的,则是协议的实现。
基础设施层
基础设施层是对各层接口申明的实现
误解
以住对基础设施层最大的误解在于认为它属于最底一层,这是错误的。基础设施层并不是被依赖的层,它是提供实现的层。其它各层依赖的一定是接口,只是由基础设施层来提供实现