Skip to main content

ddd分层

myddd遵照领域驱动编码思想,其分层设计如下:

myddd-vertx分层

总述

对于任何一个遵守领域驱动思想的编码模式来说,其分层一定包含以下几层:

  • 领域层
  • 应用层
  • UI/协议层
  • 基础设施层

它们分别负担不同的职责与任务,共同分工与合作。

领域层

领域层为业务所在最核心的层,所有业务的逻辑,应该都在领域层。

领域层只允许出现以下概念

  • 领域实体
  • 值对象
  • 仓储接口
  • 领域服务
  • 领域事件

领域层禁止依赖具体技术框架,对任何具体技术的需要,都需要以接口的方式隔离。由基础设施层提供实现。参考领域层编码规范中的仓储规范说明。

如果你在领域层发现类似hibernate的代码,或操作redis的客户端代码,这意味着这是有问题的。你应该做的是抽象出对应的接口,由基础设施层来提供实现。

应用层

应用层分为接口与实现。

应用层允许出现以下概念

  • DTO
  • 数据组装
  • 应用接口与实现

应用层的最大特点是它是很薄的一层,它绝大部分功能在于数据封装与隔离,将领域层的数据模型使用DTO隔离开来。

UI/协议层

这一层很好理解,可能是UI,当然它的含义也可以很广,对于一个REST API服务来说,类似Controller这样的,则是协议的实现。

基础设施层

基础设施层是对各层接口申明的实现

误解

以住对基础设施层最大的误解在于认为它属于最底一层,这是错误的。基础设施层并不是被依赖的层,它是提供实现的层。其它各层依赖的一定是接口,只是由基础设施层来提供实现