事件风暴(Event Storming)** 通常帮助团队理解复杂业务领域

48 阅读3分钟

🧩 一、事件风暴结果的典型构成

一次完整的事件风暴通常会产出以下几类信息:

类型示例含义
领域事件 (Domain Event)订单已创建支付完成系统中发生的业务事实
命令 (Command)创建订单确认支付用户或系统的行为意图
聚合 (Aggregate)订单、用户、商品管理业务状态与规则的核心模型
外部系统 / 参与者 (Actor/System)支付网关、库存系统与本系统交互的外部要素
策略/流程 (Policy/Process)“支付完成后触发发货”事件响应逻辑或业务规则

事件风暴的核心价值是:让事件流串联起各领域边界。


🧭 二、从事件风暴到架构的映射步骤

1️⃣ 步骤一:识别领域边界与限界上下文 (Bounded Context)

每个“领域聚集”的事件序列,可归入一个上下文(Context)。

例如在一个电商事件风暴中:

  • 用户注册、登录相关事件 → 用户上下文
  • 订单创建、支付、发货等事件 → 订单上下文
  • 积分计算、优惠券使用 → 营销上下文

这些上下文将成为架构中的服务单元(可能是微服务、模块或限界组件)。


2️⃣ 步骤二:定义上下文间的交互

交互通常体现为 事件流或命令调用,对应系统中的:

  • 异步事件总线(Kafka、RabbitMQ 等)
  • RESTful API / gRPC 调用
  • Saga / Event-Driven Orchestration 流程

例如:

订单上下文(Order Context) 
   ↓ 触发事件 → [支付完成事件]
支付上下文(Payment Context)
   ↓ 响应事件 → [发货指令]
物流上下文(Shipping Context)

通过这些交互,可以逐步显现系统架构中的依赖关系。


3️⃣ 步骤三:映射到技术架构层级

将业务上下文映射到常见的三层或微服务架构中:

层级内容技术实现
接口层 (API Layer)接收命令Spring Boot Controller、NestJS Controller
应用层 (Application Layer)协调业务用例Service、CommandHandler
领域层 (Domain Layer)封装领域逻辑Entity、Aggregate、Repository
基础设施层 (Infrastructure Layer)外部依赖DB、消息队列、远程调用

这些定义帮助从“业务语言”过渡到“工程实现语言”。


4️⃣ 步骤四:绘制架构图

以下是一个示意图,将事件风暴结果映射为服务及事件流:

graph LR
    U[用户上下文] -->|创建订单| O[订单服务]
    O -->|发布事件: 订单已创建| P[支付服务]
    P -->|触发事件: 支付完成| L[物流服务]
    O -->|监听事件: 支付完成| L
    L -->|更新订单状态| O
    subgraph MessageBus[事件总线]
    end
    O -.-> MessageBus
    P -.-> MessageBus
    L -.-> MessageBus

🧠 解读

  • 各上下文(用户、订单、支付、物流)对应微服务。
  • 它们之间通过 事件总线 异步通信。
  • 事件名称直接继承自事件风暴的便利贴结果,语义一致。

5️⃣ 步骤五:补充系统视角(非功能需求)

事件风暴主要关注业务,但架构转化时还要考虑:

维度示例对应设计
数据持久化订单表、事件溯源表MongoDB / PostgreSQL / Event Store
通信模式异步事件 → Kafka;同步接口 → REST/gRPC