Skip to content

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 ​

  1. 列出所有 BC:用 Event Storming / Bounded Context Canvas 识别
  2. 两两配对:每对 BC 之间追问——谁调用谁?谁依赖谁?谁提供接口?
  3. 选择关系类型:对照 Vernon 9 种关系(详见 9 种 BC 关系)
  4. 标注方向与 ACL:谁保护自己、谁翻译外部
  5. 可视化:用 Context Map Diagram 工具渲染(详见 工具页)

场景 2:识别"暗债" BC ​

症状:有些 BC 没在 Context Map 上(开发时没想到)、有些 BC 关系标注为"内部调用"(隐含 Conformist)。

处理:

  1. 强制全量盘点:每个团队必须列出自己 BC 的所有外部依赖
  2. 关系类型必须明示:不允许只画箭头
  3. 定期审计:每季度重画一次 Context Map,识别漂移

场景 3:拆分巨型 BC ​

问题:一个 BC 出现在 Context Map 的多个复杂关系中(10+ 关系)。

处理:

  1. 识别"内聚子模型"——BC 内某些聚合之间的关系高度紧密
  2. 抽取为新 BC,标注与原 BC 的关系(通常是 Shared Kernel / Customer-Supplier)
  3. 更新 Context Map

场景 4:遗留系统接入 ​

步骤:

  1. 把遗留系统作为一个 BC(Big Ball of Mud 关系)
  2. 新功能作为新 BC,与遗留 BC 之间强制 ACL
  3. 逐步拆分遗留 BC(V2 B7 演化)

常见误区 ​

  1. "Context Map = 服务依赖图"——错。服务依赖图只画方向,不标关系类型和翻译机制。Context Map 必须显式选择 9 种关系之一
  2. "画一次就完事"——错。BC 会演化,关系会变(V2 B7)。Context Map 是动态文档,必须随 BC 演化而更新
  3. "遗漏小 BC 没关系"——错。任何 BC 不在 Context Map 上 = 暗债。当它被外部依赖时,没人知道它存在
  4. "全员 Conformist"——错。下游全部 Conformist = 全部受上游变化影响 = 分布式单体。必须用 ACL 隔离核心域
  5. "用 UML 类图画 Context Map"——错。Context Map 表达的是协作权力关系,不是类继承。推荐用 Context Mapper 工具或简单节点-边图

关键洞察 ​

Context Map 是 BC 间的"权力地图"——它显式记录谁依赖谁、谁保护谁、谁翻译谁。

没有 Context Map,BC 间关系是隐性假设——出问题(如上游破坏下游)时,无人担责。 有了 Context Map,关系是显性契约——任何改动前都先看 Context Map,识别影响范围。

判断 Context Map 是否生效的标准 = 改一个 BC 前能立刻回答"哪些下游会受影响"。 判断失败的标志 = 改 BC 后才发现下游破了。

相关链接 ​

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