软件架构设计——事件风暴法(事件建模法)

事件风暴法

事件风暴法是一种以事件为核心的领域建模方法,适用于捕捉复杂系统的业务逻辑,并将其转化为可操作的领域模型。该方法通过识别系统中的关键事件,逐步推导出命令、行动者、策略、聚合、系统交互等领域元素,从而形成一个完整的系统设计。

事件风暴法的核心问题

在复杂系统的设计中,往往存在以下关键问题:

  1. 如何准确捕捉业务需求:确保业务需求得到准确表达,并为系统实现提供指导。
  2. 如何构建有效的领域模型:确保领域模型全面覆盖业务逻辑,并能够支撑系统的运行。
  3. 如何建立团队的统一语言:确保团队成员之间在讨论系统时使用一致的术语,避免沟通误解。

事件风暴法通过系统化的步骤来解决这些问题,将业务需求转化为技术实现。

事件风暴法的关键概念

在事件风暴法中,我们需要理解以下核心概念:

  1. 行动者(Actors):系统的使用者,可能是现实中的人,也可能是其他系统。这些行动者发起系统中的关键行为。

  2. 命令(Command):由行动者发起的行为,通常代表某种决定,是事件的起因。命令通常以“动词 + 名词”的形式表示,例如“注册用户”。这种命名方式体现了行动者在系统中的主动性。

  3. 事件(Event):系统中发生的行为或状态变化,是命令执行后的结果。事件以“名词 + 动词被动式”的形式表示,例如“用户已注册”。这种命名方式反映了系统状态的变化。

  4. 聚合(Aggregate):领域驱动设计(DDD)中的核心概念,表示一组相关的领域对象。在事件风暴中,聚合可以泛指某些领域概念,不需要在初期细化。

  5. 系统(System):指不需要了解细节的第三方系统。在建模时,这些系统可以被视为一个整体,不需深入细节。

  6. 阅读模型(Read Model):用于支撑决策的信息结构,通常与界面布局有关,决定了系统如何为用户或其他系统展示信息。

  7. 策略(Policy):对事件的响应,通常表示不属于某些聚合的逻辑。策略可以触发新的命令,这些命令称为系统触发命令(SIC, System Initiated Command)

事件风暴法的流程

事件风暴法的流程包括以下步骤:

  1. 头脑风暴,寻找领域事件:通过团队讨论,找出系统中的关键领域事件。
  2. 根据事件寻找触发命令与行动者:分析每个事件,确定触发事件的命令及其行动者。
  3. 通过事件寻找策略以及由策略触发的 SIC:识别系统中的策略,并确定这些策略触发的命令。
  4. 根据命令与事件,寻找产生变化的聚合和生成的阅读模型:通过命令和事件,识别领域中的聚合和阅读模型。
  5. 完善、细化领域模型:整合前面找到的所有元素,完善领域模型。

示例:在线订餐平台

我们以一个稍微复杂的在线订餐平台为例,详细展示如何通过事件风暴法构建领域模型。

1. 头脑风暴,寻找领域事件

首先,通过头脑风暴找出在线订餐平台中的关键领域事件。事件的表达形式为“名词 + 动词被动式”,例如“用户已注册”。

领域事件示例

  1. 用户已注册
  2. 用户已登录
  3. 菜单已浏览
  4. 餐品已添加至购物车
  5. 订单已提交
  6. 订单已支付
  7. 餐品已开始准备
  8. 餐品已送出
  9. 餐品已送达

这些事件涵盖了用户从浏览菜单到最终收到餐品的整个过程。

2. 根据事件寻找触发命令与行动者

接下来,分析每个事件,确定触发事件的命令和行动者。命令的表达形式为“动词 + 名词”,例如“注册用户”。

分析示例

  • 事件:用户已注册
    • 命令:注册用户
    • 行动者:用户(现实中的人)
  • 事件:订单已提交
    • 命令:提交订单
    • 行动者:用户
  • 事件:餐品已送出
    • 命令:发出配送指令
    • 行动者:系统(系统自动发出)

通过这种分析,我们能够理解系统中的关键行为及其背后的发起者。

3. 通过事件寻找策略以及由策略触发的 SIC

在处理某些事件时,系统可能会执行特定的策略(Policy)。策略是对事件的响应,并可能触发新的命令,这些命令称为系统触发命令(SIC)。

策略与SIC示例

  • 事件:订单已支付

    • 策略:确认支付状态,并开始准备餐品。
    • SIC:生成“餐品已开始准备”事件。
  • 事件:餐品已送达

    • 策略:记录配送完成状态,并通知用户。
    • SIC:生成“配送已完成”的记录,并向用户发送确认通知。

通过识别策略和SIC,我们能够理解系统在处理复杂业务逻辑时的行为。

4. 根据命令与事件,寻找产生变化的聚合和生成的阅读模型

在这个步骤中,我们分析命令和事件,确定领域中的聚合和阅读模型。

聚合和阅读模型示例

  • 聚合:订单聚合
    • 包含:订单详情(订单状态、餐品列表、用户信息、配送信息)
  • 聚合:用户聚合
    • 包含:用户信息(注册信息、历史订单、支付方式)
  • 阅读模型:订单跟踪视图
    • 显示:订单当前状态(准备中、配送中、已送达)、预计送达时间

通过聚合和阅读模型的构建,我们为领域模型添加了关键的结构和展示层次。

5. 完善、细化领域模型

最后一步是将以上分析的内容整合起来,逐步完善并细化领域模型。

最终领域模型示例

  • 用户(包含用户信息、历史订单)
  • 订单(包含订单详情、配送信息)
  • 餐品(包含餐品信息、库存状态)
  • 支付(包含支付信息、支付状态)
  • 通知系统(负责向用户发送通知)

总结

事件风暴法是一种从业务需求出发,通过系统化分析事件、命令、行动者、策略等领域元素,逐步构建领域模型的方法。在在线订餐平台的示例中,我们通过头脑风暴找出领域事件,分析命令和行动者,确定策略和系统触发的命令,最终构建出一个详细的领域模型。事件风暴法不仅帮助我们捕捉业务逻辑,还确保了系统设计的准确性和一致性。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值