CommandQueryEvent
语意希望触发的操作条件查询已经发生的事件通知
读/写只读取决于下游,通常写
返回值DTO/BooleanDTO/CollectionVoid

CQE 规范

  • 创建:当只有单个ID查询时可省略CQE,否则应该创建对应CQE对象
  • 校验:校验应该前置,字段上可定义注解,并在Controller/Facade 层校验
  • 避免复用:CQE有自己的语义,可以基于基类产生它们,但应该避免复用
  • 模型转化:以下类型推荐转为DP— Domain Primitive, 也是Value Object,不可变对象后再使用,如果有需要在DP中进一步校验
    • 有限制的String、Integer
    • 复杂的数据结构,比如 Map<String,Object>
Data Transfer ObjectDomain PrimitiveEntity
组成基础字段Type(独一的数据类型)与Class(逻辑聚合到类中)DP
功能数据传输,属于技术细节业务域中的概念业务概念
数据的关联只是一堆字段在一起,弱关联字段高度相关DP的组合
行为无行为有行为和业务逻辑有行为和业务逻辑

DDD不是什么特殊的架构,而是任何传统项目经过反复合理重构后会抵达的终点。

没有抵达之前糅合了MVC的代码架构可能是这样的:

SystemLayer.drawio