• DDD项目结构
  • 介绍
    • 前提准备
      • 限界上下文
      • 通用语言
    • 倾向
      • 充血模型
  • 实体与值对象
  • 聚合、聚合根(Aggregate, Aggregate Root)
    • 聚合定义了一组有内聚关系的实体与值对象集合
      • 原子性操作
      • 70%的聚合只有一个实体, 30%有2到3个实体
      • 修改聚合必须在事务级别
    • 聚合根
      • 是实体不能是值对象
      • 是对聚合引用的唯一入口
      • 聚合根删除,引用的实体不存在
      • 最好单一职责,只做聚合管理
      • 只有一个实体时,实体就是聚合根。多实体时思考哪个对象有独立存在的意义,且可与外部直接交互
    • 聚合边界划分
      • 原则
        • 生命周期一致
          • 内部对象应该与聚合根相同生命周期
        • 问题域一致性原则
        • 场景一致性原则
        • 聚合尽可能小
          • 性能问题
          • 并发问题
          • 扩展性问题
  • 领域服务(Domain Service)
    • 划分原则
      • 不能写到实体的业务逻辑
      • 跨多实体
      • 涉及外部系统交互
      • 只有方法没有状态
    • 相关问题
      • 很薄,少业务逻辑
      • 不调DAO和Repository
      • 领域服务之间可互相调用,不跨Context
  • 领域事件
    • 领域专家所关心发生在领域中的事件
      • 建模成离散事件,由领域对象表示
      • 不要滥用,实体逻辑不要用事件
    • 事件问题
      • 可读性差
      • 增加了中间层
    • 优点
      • 跨应用,MQ,削峰填谷,异步,解耦
  • 工厂(Factory)与仓储(Repository)
    • 用于实体创建
      • 只有聚合根才有仓储,最好只有一个
      • 仓储最好只有一个saveById
    • 工厂
      • 入参是值对象