mcpField
D
ddd-event-storming

ddd-event-storming

github.com/yonatankarp开发148 次安装24 周前更新
代码仓库

关于 ddd-event-storming

一种用于领域探索的 EventStorming 工作坊方法,帮助领域专家与工程师共同梳理业务流程、发现边界和待解决问题。它提供从全局流程到软件设计的不同层次。

主要功能

  1. 01按时间线梳理领域事件
  2. 02识别命令、参与者与策略
  3. 03标记读模型、外部系统和热点
  4. 04支持全景、流程及软件设计层次

适用场景

  1. 01新项目中探索业务领域
  2. 02重建缺少文档的系统知识
  3. 03协调领域专家与工程师
  4. 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 小时内重试。”
  • 读模型(绿色)——作出决策所需的数据。“可用库存视图”。
  • 外部系统(粉色)——模型之外的系统。“支付服务商”“电子邮件服务”。
  • 热点(红色)——问题、冲突或困惑之处。这是最有价值的一类——每张红色便笺都是一次学习机会。

流程节奏。

  1. 混乱探索。 每个人都在便笺上写下事件,并贴到墙上。不做组织,不排序。
  2. 时间线。 按时间顺序从左到右重新排列事件。合并重复项;显现出缺口。
  3. 关键事件。 找出最重要的状态转换。这些事件通常标志着限界上下文的边界。
  4. 沿时间线梳理。 从头到尾讲述整个过程。找出矛盾;完善事件;提出热点。
  5. 添加命令、参与者、策略和读模型。 逐步补充周边结构。

需要带走的产出。 墙面的照片(或虚拟导出)。热点清单。对限界上下文的初步猜测。候选聚合及其发出的事件。需要后续跟进的待解决问题。

决策启发式

  • 领域专家必不可少。如果他们不在现场,就推迟会议。
  • 以参与度而非正确性为优化目标。活动中暂时有些不准确的地方,会在梳理时间线时得到纠正。
  • 热点是最重要的产出。每条红色便签都是学习机会;工作坊结束后要逐一跟进。
  • 先看全局,再梳理具体流程;只有在更广泛的背景脉络理清后,才能深入具体流程。如果不先看全局就直接建模流程,就可能选错要建模的流程。
  • 对远程团队来说,虚拟白板(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