4. 事件风暴画布设计:画布结构、颜色与符号规范

事件风暴(Event Storming)是一种协作建模技术,而画布是其核心载体。在分布式事务场景中,画布不仅需要承载业务流,还必须映射技术边界与安全约束。本节将定义画布的三大结构要素、一套高对比颜色系统以及标准符号规范,确保团队在跨职能讨论时拥有统一的“视觉语言”。

4.1 画布结构:时间轴、泳道与聚合边界

画布采用从左至右的时间推进逻辑,结合垂直泳道划分职责域,并通过聚合边界封装一致性单元。三者共同构成事件风暴的骨架。

结构要素 定义 在分布式事务中的用途
时间轴 水平方向从左到右表示事件发生的先后顺序 映射事务的 begin → prepare → commit/rollback 阶段
泳道 垂直方向划分不同 Bounded Context 或微服务 区分订单、支付、库存等不同服务的事件与命令
聚合边界 用粗虚线框包裹一组强一致性实体与事件 标识一个本地事务边界(如订单聚合内的状态变更)
实践建议:在画布顶部标注全局时间刻度(如 T0, T1, T2),每个刻度对应一个分布式事务的里程碑节点。泳道数量建议控制在 5~7 条以内,超出时考虑分层画布。

4.2 颜色与符号规范

颜色用于快速区分事件类型、命令、角色与边界。符号则定义了每个元素的形状与线型。以下规范直接对齐参考脚本的高对比色板,确保在投影或打印时均清晰可辨。

4.2.1 核心元素颜色对照表

元素类型 填充色 描边色 文字色 形状
领域事件 #e74c3c (红) #c0392b #ffffff 圆角矩形
命令 #3498db (蓝) #2980b9 #ffffff 直角矩形
聚合 #2ecc71 (绿) #27ae60 #ffffff 圆角矩形 + 粗边框
外部系统/角色 #f39c12 (橙) #e67e22 #ffffff 六边形
策略/规则 #9b59b6 (紫) #8e44ad #ffffff 圆角菱形
说明/注释 #fff3cd #ffc107 #856404 矩形 + 左侧竖线

4.2.2 线型与边界规范

  • 实线箭头(#7f8c8d):表示事件流或命令触发关系,箭头指向接收方。
  • 虚线箭头(#7f8c8d, stroke-dasharray="5,5"):表示异步消息、超时信号或补偿动作。
  • 粗虚线框(描边 #7f8c8d, 线宽 3):表示聚合边界或事务边界。
  • 双线框(描边 #1abc9c):表示跨服务的 Saga 协调器边界。

4.3 画布结构 SVG 示意图

下图展示了一个包含时间轴、三条泳道(订单服务、支付服务、库存服务)以及两个聚合边界的典型画布布局。节点颜色严格遵循 4.2 节规范。

事件风暴画布结构示例 时间轴 (T0 → T1 → T2 → T3) T0 T1 T2 T3 订单服务 支付服务 库存服务 聚合边界: 订单聚合 订单已创建 扣减库存 聚合边界: 支付聚合 支付已受理 支付成功 支付网关 库存已扣减 超时补偿 说明:每个聚合边界内部的事件与命令构成一个本地事务单元;跨边界的箭头表示分布式事务中的消息或 RPC 调用。 虚线框代表聚合边界,实线箭头代表同步命令,虚线箭头(未画出)代表异步补偿。

4.4 符号使用规范与常见误区

常见误区:将“命令”与“事件”的颜色混淆,或在聚合边界内放置跨服务的事件。记住:命令是蓝色的“请求”,事件是红色的“事实”。聚合边界内只能包含同一服务内的实体与事件。

4.4.1 符号使用速查表

场景 正确符号 错误示例
用户提交订单 蓝色直角矩形:提交订单(命令) 红色圆角矩形(误用事件表示命令)
订单状态变为“已支付” 红色圆角矩形:订单已支付(领域事件) 蓝色直角矩形(误用命令表示事件)
订单与订单项必须同时保存 绿色粗边框圆角矩形包裹两者(聚合) 分开放在不同泳道(破坏事务边界)
支付超时后触发取消 紫色菱形:超时取消策略(策略) 直接用红色事件表示(策略不是事件)

4.5 第二张 SVG:颜色与符号图例

为方便团队快速查阅,以下 SVG 以图例形式汇总所有元素的标准配色与形状,可直接打印作为 workshop 参考。

事件风暴颜色与符号图例 事件风暴画布 — 颜色与符号图例 领域事件 填充: #e74c3c | 描边: #c0392b 形状: 圆角矩形 (rx=8) 命令 填充: #3498db | 描边: #2980b9 形状: 直角矩形 (rx=0) 聚合 填充: #2ecc71 | 描边: #27ae60 形状: 圆角矩形 + 粗边框 外部系统 填充: #f39c12 形状: 六边形 策略 填充: #9b59b6 | 形状: 菱形 说明 / 注释 填充: #fff3cd | 描边: #ffc107 聚合边界 线型: 粗虚线 (dasharray) 实线箭头: 同步调用 虚线箭头: 异步/补偿

4.6 画布设计检查清单

交付检查清单:
  • ☐ 时间轴是否覆盖了事务的完整生命周期(begin → end)?
  • ☐ 每个泳道是否对应一个独立的 Bounded Context 或微服务?
  • ☐ 聚合边界内是否只包含同一本地事务的实体?
  • ☐ 所有事件是否使用红色圆角矩形?所有命令是否使用蓝色直角矩形?
  • ☐ 跨泳道的箭头是否标注了消息类型(同步/异步)?
  • ☐ 是否在画布角落放置了颜色图例(可参考 4.5 节 SVG)?