Skip to content

IDDD 实践指引(Vaughn Vernon)

按概念递进,不按原书章节——读者认知路径:先懂"为什么",再懂"是什么",再懂"怎么做"。

原书 14 章被重新组织为 8 个概念层。每层融合多章内容,按"读者什么时候需要这个概念"排序,不是按 Vernon 写作顺序。

一、为什么 IDDD 不是按章节读

原书章节顺序的局限

  • Vernon 的章节是为"已懂 DDD 的人写的",不是给"第一次学的人"
  • ch01-02 看似入门,但 ch02 的 Segregated Core / SaaSOvation 案例对初学者太重
  • ch13 集成 BC 放在最后,但初学者 ch02 就需要知道 BC 间怎么连
  • ch10 聚合是核心,但初学者在 ch02 就应该知道"聚合会跨 BC"

概念递进的设计

  • 每层独立可读
  • 后一层引用前一层,但不依赖后一层
  • 每层有完整 9 段范本(是什么/为什么/怎么做/何时/失效/相关)

二、概念递进 8 层

标题回答什么问题融合的 IDDD 章
L1入门:为什么要 DDDDDD 解决什么?什么时候用?ch01
L2战略基础:业务空间(Domain / Subdomain)业务怎么分解?什么是核心域?ch02 §前半
L3战略基础:限界上下文(BC)解决方案空间怎么划分?BC 是什么?ch02 §后半 + ch04
L4战略深入:上下文映射(BC 间关系)BC 间怎么连?7 大关系模式ch03
L5战术基础:实体与值对象Model 在 BC 内怎么组织?ch05 + ch06
L6战术核心:聚合业务不变约束怎么保护?ch10 + ch11 + ch07
L7战术深入:领域服务 / 工厂 / 仓储 / 模块BC 内的代码组织ch07 + ch09 + ch11 + ch12
L8跨 BC 集成 + 应用层BC 间集成 + 应用服务ch13 + ch14

三、8 层精读导览

L1 - 入门:为什么要 DDD

回答:DDD 解决什么?什么时候用不用?

核心论点

  • 业务复杂度危机("Big Ball of Mud")
  • DDD 是"协作方法论"非"技术框架"
  • 何时用:核心域 + 多团队 + 复杂业务
  • 何时不用:CRUD + 单团队 + 简单业务

关联章节:原书 ch01

L2 - 战略基础:业务空间(Domain / Subdomain)

回答:业务怎么分解?什么是核心域?

核心论点

  • Domain = 业务全景
  • Subdomain = 业务自然分解
  • 三类型:Core / Supporting / Generic
  • 核心域最高投入,通用域买现成

关联章节:原书 ch02 前半

L3 - 战略基础:限界上下文(BC)

回答:解决方案空间怎么划分?BC 是什么?

核心论点

  • BC = Model 的显式边界
  • Subdomain → BC 的映射(1 对 1 / 1 对多 / 多对 1)
  • BC 是"垂直切片"(代码 + 团队 + 部署 + 数据库)
  • Segregated Core(大 BC 切核心)
  • BC 命名(用业务能力,不用技术词)

关联章节:原书 ch02 后半 + ch04

L4 - 战略深入:上下文映射(BC 间关系)

回答:BC 间怎么连?什么关系?

核心论点

  • 为什么 BC 间关系需要显式建模
  • 7 大关系模式(Partnership / Customer-Supplier / Conformist / ACL / Shared Kernel / Separate Ways / Open Host Service)
  • 集成模式选择决策树
  • 上下文映射图(活的文档)

关联章节:原书 ch03

L5 - 战术基础:实体与值对象

回答:Model 在 BC 内怎么组织?

核心论点

  • Entity:身份 + 生命周期
  • Value Object:描述 + 不可变
  • 实体 vs 值对象决策树
  • 角色的设计(实体多角色)

关联章节:原书 ch05 + ch06

L6 - 战术核心:聚合

回答:业务不变约束怎么保护?

核心论点

  • 为什么需要聚合(不变约束事务边界)
  • Vernon 三大规则(小 / 不变约束 / ID 引用)
  • 突破规则的 4 大时机(UI / 技术缺 / 全局事务 / 查询性能)
  • 实施细节(根实体 / 值对象 / Tell-Don't-Ask / 乐观锁 / 避免 DI)
  • 跨聚合通信引入领域事件

关联章节:原书 ch10 + ch11(工厂用于聚合创建)+ ch07(服务作为聚合边界)

L7 - 战术深入:领域服务 / 工厂 / 仓储 / 模块

回答:BC 内的代码组织?

核心论点

  • 领域服务:跨实体行为
  • 工厂:复杂创建(聚合根组装)
  • 仓储:聚合持久化(按聚合根组织)
  • 模块:BC 内代码组织(按业务能力分包)

关联章节:原书 ch07 + ch09 + ch11 + ch12

L8 - 跨 BC 集成 + 应用层

回答:BC 间怎么集成?应用服务做什么?

核心论点

  • 集成模式(Distant / ACL / Open Host / Published Language)
  • 集成战术(事件 / HTTP / 共享文件)
  • Application Service 职责(编排 + 事务 + 持久化)
  • 事务边界(按业务用例)

关联章节:原书 ch13 + ch14

四、每层范本(9 段)

每层文档按以下 9 段展开:

  1. # 层标题
  2. ## 一句话 —— 一句话总结本层核心
  3. ## 这本书在这一层说了什么 —— 融合多章的核心论点
  4. ## 是什么 —— 概念定义(忠实原书)
  5. ## 为什么 —— 为什么要这个(书里的理由)
  6. ## 怎么做 —— 工程可执行步骤(来自书)
  7. ## 什么时候用 / 什么时候不用 —— 实践判断
  8. ## 看不见的地方 —— 失效模式
  9. ## 相关节点 —— 骨架 A/B 节点映射

五、与其他实践指引的关系

IDDD(DDD 战略战术)
  ↓ 领域事件 + 集成 BC
EDM(事件驱动基础设施)
  ↓ Schema 演化 + Saga
  ├── 工程层:单写者 + 拓扑 + 框架选型
  └── 哲学层:涌现 + 解耦 + 自治

互补关系

  • IDDD L4 上下文映射 ↔ EDM Ch 4 CDC + Ch 8 Saga
  • IDDD L6 聚合 ↔ EDM Ch 2 Single Writer
  • IDDD L8 跨 BC 集成 ↔ EDM Ch 13 混合架构

六、当前已落地

状态备注
L1 入门ch01-getting-started
L2 业务空间🔄 进行中由 ch02 + ch04 融合(正在重写为概念递进结构)
L3 限界上下文🔄 进行中由 ch02 后半 + ch04 融合
L4 上下文映射📝 待做由 ch03 展开
L5 实体与值对象📝 待做由 ch05 + ch06 展开
L6 聚合(核心)📝 待做由 ch10 + ch11 + ch07 展开
L7 战术深入📝 待做由 ch07 + ch09 + ch11 + ch12 展开
L8 跨 BC + 应用层📝 待做由 ch13 + ch14 展开

从名家方法论与工程化思路中蒸馏出自己的工程体系。