Skip to content

Day 05 - 事件风暴工作坊

📖 今日目标

  1. 理解事件风暴(Event Storming)的概念
  2. 掌握事件风暴的工作坊流程
  3. 学会用事件风暴发现领域模型

核心概念

什么是事件风暴?

事件风暴(Event Storming) 是由Alberto Brandolini发明的一种团队协作式领域建模方法,通过可视化方式探索复杂业务系统。

核心思想:

  • 用"领域事件"作为发现业务逻辑的主线
  • 快速发现模型、流程和边界
  • 让业务专家和技术人员共同参与

关键要点

1. 事件风暴的参与者

角色职责
业务专家提供业务知识,验证事件准确性
开发者技术实现可行性和模型设计
领域专家/DDD教练引导讨论,记录模型

2. 事件风暴的步骤

第一步:发现领域事件

  • 用橙色贴纸表示领域事件
  • 格式:动词过去式(已下单、已支付、已发货)
  • 让业务专家列举系统中的所有重要事件

第二步:识别命令

  • 用蓝色贴纸表示触发事件的用户动作
  • 格式:动词(下单、支付、取消订单)
  • 连接命令到相应的事件

第三步:发现聚合

  • 用黄色贴纸表示处理命令的实体
  • 聚合是命令和事件的逻辑处理单元

第四步:识别限界上下文

  • 用彩色边界线划分不同限界上下文
  • 识别上下文之间的集成点

第五步:添加策略和规则

  • 用紫色贴纸表示业务规则和约束
  • 补充在事件和命令上的政策说明

3. 事件风暴的颜色约定

颜色含义
橙色领域事件
蓝色用户命令
黄色聚合
紫色业务规则/策略
粉色读模型/视图
绿色外部系统
红色问题/异常

4. 事件风暴的好处

  • 快速:几个小时的研讨会可以得到完整领域图
  • 包容:不需要技术背景,任何人都能参与
  • 可视化:所有人看到同一张图
  • 发现:自然暴露业务中的复杂点和问题

5. 事件风暴的输出

  • 领域事件清单
  • 命令与事件的对应关系
  • 聚合和聚合根
  • 限界上下文边界
  • 关键业务规则

面试考点

问题1:事件风暴相比传统建模方法的优势是什么?

答案:

  1. 参与度高

    • 传统建模只有分析师参与
    • 事件风暴让所有相关方共同参与
  2. 速度快

    • 传统OOA可能需要数周分析
    • 事件风暴可以在几天内完成
  3. 可视化强

    • 所有人看到同一张大图
    • 便于讨论和发现
  4. 自然发现边界

    • 通过事件和聚合自然识别限界上下文
    • 而不是先入为主假设边界
  5. 暴露业务复杂性

    • 通过并行事件和冲突暴露业务复杂度
    • 提前发现难以处理的场景

问题2:事件风暴中的领域事件应该如何命名?

答案:

领域事件命名的原则:

  1. 使用过去式

    • OrderPlaced(订单已下单)
    • PaymentReceived(支付已接收)
    • ShipmentDelivered(货物已送达)
  2. 反映业务事实

    • 不是技术操作:UserUpdatedProfile
    • 而是业务含义:UserProfileChanged
  3. 包含关键信息

    • OrderPaidWithCreditCard(携带支付方式)
    • OrderCancelledDueToTimeout(携带取消原因)
  4. 避免动词歧义

    • OrderModified(修改了什么?)
    • OrderShippingAddressUpdated
  5. 一个事件描述一个业务事实

    • 避免在一个事件中包含多个变化

实践思考

🎯 思考题

以电商退货场景为例:

  1. 列出所有可能发生的领域事件
  2. 识别触发这些事件的命令
  3. 找出涉及的聚合
  4. 识别业务规则(如:超过30天不能退货)

📚 扩展阅读


📅 学习进度

Day主题状态
01DDD初识:什么是领域驱动设计
02战略设计:限界上下文与上下文映射
03战略设计:通用语言与领域建模
04战略设计:子域划分与核心域识别
05事件风暴工作坊
06实体(Entity)与标识
.........
30复习与总结

本文为DDD 30天学习计划第5天内容

📚 导航

| ← Day 04 - 上一章 | Day 06 - 下一章 →

最后更新: