DDD实施规范

在遵守JAVA开发手册基础上DDD实施规范

一、约束规则

1.开发对外dubbo接口,都要用Response封装
2.调用外部的dubbo的, 都要在领域下infrastructure->adapter做防腐, 方法名根据业务语义命名,保证可读性;
3.命名 聚合根:xxxAggregateEntity 实体:xxxxEntity 值对象尾部命名xxxxInfo,不要用xxxxxVO 命令操作service命名 xxxCmdService 查询操作service命名 xxxQueryService
4.application 下是对xxxCmdService实现 query 下是对xxxQueryService实现 receiver 下是对外部mq的监听,和内部领域事件的监听 infrastructure—>Converter 所有转换对象操作

Application层

  • 服务接口参数校验,放在Application Service层;

Domain层

  • 针对一个聚合,外部对象除了聚合根之外看不到其他对象;

  • 聚合根之间不能互相调用,一个聚合内只能依赖另外一个聚合根的id;

  • 一个聚合根对应一个Repository,其他实体不能有Repository;

  • Entity不能直接调用Repository;

  • 领域层不能依赖DO对象;

  • Entity不能有Setter方法;

  • 通过Strategy模式,显式化业务规则;如:校验规则,抽象为Validator类;

Infrastructure层

  • Query Dao采用Mybatis,不能引用Entity;

二、分层和命名规范

分层架构规范

依赖原则:上层依赖下层,下层不能反向依赖上层

image

包结构和命名范例 .

interfaces层目前没应用因为开发觉得繁琐,但是最好应用,这样职能更清楚

image

三、数据对象

image

四、事件定义

  • 事件对象定义在API包中,以便其它域可以监听事件;

  • 事件对象的定义格式:领域实体名+动词过去式+Event后缀,如:OrderFinishedEvent;

  • 事件的发送统一采用Spring Data提供的registerEvent方法来进行注册;

推荐阅读更多精彩内容