Context Map(上下文映射图)
解决什么问题:当多个 Bounded Context 共存时,谁依赖谁、怎么协作、信息怎么翻译——Context Map 把 BC 间的隐式关系显式化,避免"系统集成的真相只在开发者脑子里"。
它是什么
Context Map(上下文映射图) 是 DDD 战略层的核心输出之一——一张描述所有 BC 之间关系的图。它不是 UML,不是架构图,而是业务协作图:
- 每个 BC 是一个节点
- BC 之间的关系(U/D 方向、9 种关系类型)是边
- 标注权力与意图(谁配合谁、谁保护谁、谁独立)
Vernon Ch 3: "A Context Map is a document that describes the contact between bounded contexts and the teams that work on them."
V2 视角(V2.7 B3 段 4 改造后):Context Map = 控制论"非相互作用系统"在业务边界的工程化——BC 是子系统,关系是控制矩阵元素。
关键属性
| 属性 | 值/含义 |
|---|---|
| 范围 | 全局,跨所有 BC |
| 节点 | Bounded Context(每个 BC 一份) |
| 边 | 9 种 BC 关系(Partnership / Shared Kernel / Customer-Supplier / Conformist / ACL / OHS / PL / Separate Ways / BoM) |
| 方向 | U(上游)→ D(下游),影响方向 |
| 标注 | 权力强弱 + 翻译机制 + ACL 位置 |
| 反模式 | 只画"服务依赖图",不标关系类型(隐式假设 Conformist) |
| 核心约束 | 任何 BC 必须出现在 Context Map 中——遗漏 = 暗债 |
怎么用
场景 1:从零绘制 Context Map
- 列出所有 BC:用 Event Storming / Bounded Context Canvas 识别
- 两两配对:每对 BC 之间追问——谁调用谁?谁依赖谁?谁提供接口?
- 选择关系类型:对照 Vernon 9 种关系(详见 9 种 BC 关系)
- 标注方向与 ACL:谁保护自己、谁翻译外部
- 可视化:用 Context Map Diagram 工具渲染(详见 工具页)
场景 2:识别"暗债" BC
症状:有些 BC 没在 Context Map 上(开发时没想到)、有些 BC 关系标注为"内部调用"(隐含 Conformist)。
处理:
- 强制全量盘点:每个团队必须列出自己 BC 的所有外部依赖
- 关系类型必须明示:不允许只画箭头
- 定期审计:每季度重画一次 Context Map,识别漂移
场景 3:拆分巨型 BC
问题:一个 BC 出现在 Context Map 的多个复杂关系中(10+ 关系)。
处理:
- 识别"内聚子模型"——BC 内某些聚合之间的关系高度紧密
- 抽取为新 BC,标注与原 BC 的关系(通常是 Shared Kernel / Customer-Supplier)
- 更新 Context Map
场景 4:遗留系统接入
步骤:
- 把遗留系统作为一个 BC(Big Ball of Mud 关系)
- 新功能作为新 BC,与遗留 BC 之间强制 ACL
- 逐步拆分遗留 BC(V2 B7 演化)
常见误区
- "Context Map = 服务依赖图"——错。服务依赖图只画方向,不标关系类型和翻译机制。Context Map 必须显式选择 9 种关系之一
- "画一次就完事"——错。BC 会演化,关系会变(V2 B7)。Context Map 是动态文档,必须随 BC 演化而更新
- "遗漏小 BC 没关系"——错。任何 BC 不在 Context Map 上 = 暗债。当它被外部依赖时,没人知道它存在
- "全员 Conformist"——错。下游全部 Conformist = 全部受上游变化影响 = 分布式单体。必须用 ACL 隔离核心域
- "用 UML 类图画 Context Map"——错。Context Map 表达的是协作权力关系,不是类继承。推荐用 Context Mapper 工具或简单节点-边图
关键洞察
Context Map 是 BC 间的"权力地图"——它显式记录谁依赖谁、谁保护谁、谁翻译谁。
没有 Context Map,BC 间关系是隐性假设——出问题(如上游破坏下游)时,无人担责。 有了 Context Map,关系是显性契约——任何改动前都先看 Context Map,识别影响范围。
判断 Context Map 是否生效的标准 = 改一个 BC 前能立刻回答"哪些下游会受影响"。 判断失败的标志 = 改 BC 后才发现下游破了。
相关链接
- Bounded Context——Context Map 的节点
- 9 种 BC 关系——边类型的选择空间
- Context Map Diagram——可视化工具
- [V3 涌现作为] · 分解——BC 是分解的产物,Context Map 是分解的协作图
- 源典 IDDD Ch 3——Vernon 原书精读
- 源典 控制论 Ch 6 §6.3——矩阵对角化的数学原型