关于 ddd-event-storming
一种用于领域探索的 EventStorming 工作坊方法,帮助领域专家与工程师共同梳理业务流程、发现边界和待解决问题。它提供从全局流程到软件设计的不同层次。
主要功能
- 01按时间线梳理领域事件
- 02识别命令、参与者与策略
- 03标记读模型、外部系统和热点
- 04支持全景、流程及软件设计层次
适用场景
- 01新项目中探索业务领域
- 02重建缺少文档的系统知识
- 03协调领域专家与工程师
- 04分析流程并发现限界上下文
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ yonatankarp/ software-design-skills --skill ddd-event-storming安装后在 Claude Code 中输入/ddd-event-storming确认已加载。
详细介绍
一句话总结
由 Alberto Brandolini 创立的一种协作式工作坊形式:领域专家和工程师将业务流程映射为贴在墙上(实体墙或虚拟白板)的从左到右的过去时事件序列,并在此过程中梳理出命令、参与者、策略、读模型和热点。
何时使用此技能
- 全新项目——在编写代码前探索领域及其限界上下文。
- 无人能完全理解的现有系统——重建已经流失为团队隐性知识的领域知识。
- 跨团队协作——让领域专家和工程师参与同一场讨论。
- 确定限界上下文边界——无法归入单一上下文的事件通常标志着边界。
- 设计单个功能或流程——流程建模式 EventStorming 聚焦于一项工作流。
何时不使用此技能
- 战术层面的代码问题——EventStorming 是领域探索工作坊,而非代码设计工具。
- 领域确实已经充分理解且稳定——当存在困惑或需要新视角时,工作坊才有价值;如果所有人已经达成共识,就没有必要。
- 没有领域专家参与——仅由工程师开展 EventStorming,只会重现工程师已有的认知,而不是业务的实际运作方式。
核心内容
EventStorming 的三个层次(Brandolini):
- 全景视图(Big Picture)。 跨部门/上下文的整个业务流程。产出:一面贴满事件的墙,按时间顺序讲述端到端“发生了什么”。通常需要半天到一天。
- 流程建模(Process Modeling)。 聚焦于一项流程。添加命令(触发事件的内容)、参与者(发出命令的人)、策略(规则)、读模型(作出决策所需的数据)和外部系统。每项流程通常需要几个小时。
- 软件设计(Software Design)。 进一步细化。将事件映射到聚合。确定哪些事件会更新哪些聚合。产出可直接用于战术模型——实体、值对象、仓储。
术语表(按惯例使用不同颜色的便笺):
- 领域事件(橙色)——使用过去时,具有业务含义。“OrderPlaced”“RefundIssued”。
- 命令(蓝色)——触发事件的内容。“PlaceOrder”“IssueRefund”。
- 参与者(黄色)——发出命令的人。“Customer”“Operator”。
- 策略(紫色)——将事件与命令关联起来的规则。“每当付款失败时,在 24 小时内重试。”
- 读模型(绿色)——作出决策所需的数据。“可用库存视图”。
- 外部系统(粉色)——模型之外的系统。“支付服务商”“电子邮件服务”。
- 热点(红色)——问题、冲突或困惑之处。这是最有价值的一类——每张红色便笺都是一次学习机会。
流程节奏。
- 混乱探索。 每个人都在便笺上写下事件,并贴到墙上。不做组织,不排序。
- 时间线。 按时间顺序从左到右重新排列事件。合并重复项;显现出缺口。
- 关键事件。 找出最重要的状态转换。这些事件通常标志着限界上下文的边界。
- 沿时间线梳理。 从头到尾讲述整个过程。找出矛盾;完善事件;提出热点。
- 添加命令、参与者、策略和读模型。 逐步补充周边结构。
需要带走的产出。 墙面的照片(或虚拟导出)。热点清单。对限界上下文的初步猜测。候选聚合及其发出的事件。需要后续跟进的待解决问题。
决策启发式
- 领域专家必不可少。如果他们不在现场,就推迟会议。
- 以参与度而非正确性为优化目标。活动中暂时有些不准确的地方,会在梳理时间线时得到纠正。
- 热点是最重要的产出。每条红色便签都是学习机会;工作坊结束后要逐一跟进。
- 先看全局,再梳理具体流程;只有在更广泛的背景脉络理清后,才能深入具体流程。如果不先看全局就直接建模流程,就可能选错要建模的流程。
- 对远程团队来说,虚拟白板(Miro、Mural、FigJam)可以胜任;但条件允许时,线下会议的成效明显更好。
反模式
- 没有领域专家参与的 EventStorming。 把工程上的想法伪装成对领域的理解。
- 一个人站在墙前,其他人围观。 没有协作 → 没有共同理解。
- 使用祈使语气描述事件。 “UpdateOrder” 是命令,不是事件。必须使用过去时——工作坊中的术语有严格要求。
- 在 Big Picture 之前进行 Software Design EventStorming。 在不了解业务流程的情况下对聚合建模,时机过早。
- 会议结束后把整面墙卷起来收走。 这些产物必须转化为代码、工单或后续会议,否则工作坊就会变成没有后续行动的“团队建设”活动。
另请参阅
ddd-design— EventStorming 是ddd-design最常采用的发现技术之一。ddd-bounded-context— 关键事件会揭示上下文边界。ddd-ubiquitous-language— 这些事件会成为统一语言中的词汇。ddd-domain-event— 对工作坊中梳理出的事件进行战术层面的规范化。
参考资料
- Alberto Brandolini,Introducing EventStorming(Leanpub,正在编写中)——权威参考资料。
- Vlad Khononov,Learning Domain-Driven Design,第 12 章(EventStorming)。
- Brandolini 的演讲和博客文章(
ziobrando.blogspot.com)。
评论
支持 Markdown