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 | 入门:为什么要 DDD | DDD 解决什么?什么时候用? | 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 段展开:
# 层标题## 一句话—— 一句话总结本层核心## 这本书在这一层说了什么—— 融合多章的核心论点## 是什么—— 概念定义(忠实原书)## 为什么—— 为什么要这个(书里的理由)## 怎么做—— 工程可执行步骤(来自书)## 什么时候用 / 什么时候不用—— 实践判断## 看不见的地方—— 失效模式## 相关节点—— 骨架 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 展开 |