事件建模Skill event-modeling

事件建模技能是一种基于Adam Dymitruk方法论的可视化工具,用于设计和规划事件驱动系统。它涵盖命令、事件、读模型和自动化四种规范,通过泳道图帮助团队在软件开发中进行架构设计、事件驱动架构规划和最佳实践遵循。关键词:事件建模,事件驱动系统,架构设计,泳道图,命令事件模型,系统设计,软件架构,可视化方法,业务过程建模。

架构设计 0 次安装 0 次浏览 更新于 3/11/2026

name: 事件建模 description: Adam Dymitruk的事件建模方法论,包含泳道图 argument-hint: <流程> [–depth <概览|标准|详细>] [–output <ascii|mermaid|两者>] allowed-tools: 读, 全局, 搜索, 写, 编辑, 技能, 任务, mcp__perplexity__搜索

事件建模技能

何时使用此技能

在以下情况下使用此技能:

  • 事件建模任务 - 处理Adam Dymitruk的事件建模方法论,包含泳道图
  • 规划或设计 - 需要事件建模方法指导
  • 最佳实践 - 希望遵循既定模式和标准

概述

使用Adam Dymitruk的可视化方法来设计事件驱动系统,创建事件模型。

强制:文档优先方法

在创建事件模型之前:

  1. 调用docs-management技能获取事件建模模式
  2. 通过MCP服务器验证方法(如perplexity, eventmodeling.org
  3. 基于Adam Dymitruk的原始方法指导

事件建模基础

事件建模结构:

时间从左到右流动 ───────────────────────────────────────────►

┌─────────────────────────────────────────────────────────────────────┐
│ 蓝色:用户界面 / 命令 / 外部触发器                                │
│ ┌──────────┐  ┌──────────┐  ┌──────────┐                           │
│ │ 屏幕/    │  │ 按钮     │  │ API      │                           │
│ │ 线框图    │  │ 点击     │  │ 调用     │                           │
│ └────┬─────┘  └────┬─────┘  └────┬─────┘                           │
├──────┼─────────────┼─────────────┼──────────────────────────────────┤
│      ▼             ▼             ▼                                  │
│ 橙色:领域事件(状态变化)                                          │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐                 │
│ │ 订单已下      │ │ 订单已付      │ │ 订单已发      │                 │
│ └──────────────┘ └──────────────┘ └──────────────┘                 │
│      │                 │               │                            │
├──────┼─────────────────┼───────────────┼────────────────────────────┤
│      ▼                 ▼               ▼                            │
│ 绿色:读模型 / 投影                                                 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐                 │
│ │ 订单列表     │ │ 支付         │ │ 发货         │                 │
│ │ 视图         │ │ 状态         │ │ 仪表板       │                 │
│ └──────────────┘ └──────────────┘ └──────────────┘                 │
└─────────────────────────────────────────────────────────────────────┘

四种规范类型

1. 命令(蓝色泳道 - 顶部)

命令:可能导致状态变化的用户意图

特点:
- 代表用户操作或外部触发器
- 可能成功或失败(验证)
- 成功时产生一个或多个事件
- 包括用户界面命令的线框图/模拟

示例:
┌─────────────────────────────┐
│ 下订单                       │
├─────────────────────────────┤
│ • 客户ID                     │
│ • 商品:[产品ID, 数量]       │
│ • 配送地址                   │
│ • 支付方式                   │
└─────────────────────────────┘

2. 事件(橙色泳道 - 中间)

事件:已发生的事实(过去式,不可变)

特点:
- 过去式命名(如OrderPlaced,不是PlaceOrder)
- 记录后不可变
- 捕获发生了什么及何时发生
- 单一事实来源

命名约定:
✓ OrderPlaced
✓ PaymentReceived
✓ ShipmentDispatched
✗ PlaceOrder(命令,不是事件)
✗ OrderUpdate(太模糊)

示例:
┌─────────────────────────────┐
│ OrderPlaced                 │
├─────────────────────────────┤
│ • OrderId: guid             │
│ • CustomerId: guid          │
│ • Items: [...]              │
│ • PlacedAt: timestamp       │
│ • TotalAmount: decimal      │
└─────────────────────────────┘

3. 读模型(绿色泳道 - 底部)

读模型:针对查询优化的投影

特点:
- 从事件构建
- 针对特定查询模式优化
- 可以从事件流重建
- 最终一致

类型:
- 列表视图(显示多项)
- 详情视图(单个项目详情)
- 仪表板(聚合)
- 搜索索引

示例:
┌─────────────────────────────┐
│ OrderSummaryView            │
├─────────────────────────────┤
│ • OrderId                   │
│ • CustomerName              │
│ • Status(派生)           │
│ • ItemCount                 │
│ • TotalAmount               │
│ • LastUpdated               │
└─────────────────────────────┘

4. 自动化(政策/反应)

自动化:由事件触发的进程

特点:
- 自动响应事件
- 可能产生命令或集成外部系统
- 代表业务政策
- 处理异步处理

表示法:
┌─────────────────────────────┐
│ ⚡ PaymentReceivedPolicy    │
├─────────────────────────────┤
│ WHEN: PaymentReceived       │
│ THEN: InitiateShipment      │
└─────────────────────────────┘

事件建模过程

步骤1:脑力激荡事件

脑力激荡所有领域事件(橙色便利贴):

1. 聚集利益相关者
2. 问:“这个进程中发生了什么?”
3. 以过去式写事件
4. 暂时不关心顺序
5. 包括所有重要状态变化

示例输出:
- OrderPlaced
- OrderConfirmed
- PaymentReceived
- PaymentFailed
- InventoryReserved
- ShipmentCreated
- ShipmentDispatched
- OrderDelivered

步骤2:安排时间线

按时间顺序组织事件:

1. 找到“快乐路径”事件
2. 从左到右排列
3. 垂直分组相关事件
4. 识别并行流
5. 注意时间依赖

时间线:
OrderPlaced → OrderConfirmed → PaymentReceived → InventoryReserved → ShipmentCreated → ShipmentDispatched → OrderDelivered
                                   │
                                   └→ PaymentFailed → OrderCancelled

步骤3:添加命令(蓝色)

什么触发每个事件?

对每个事件,问:
- 什么用户操作导致这个?
- 什么外部系统触发它?
- 是否有用户界面屏幕涉及?

添加命令在其产生的事件上方:
[PlaceOrder] → OrderPlaced
[ProcessPayment] → PaymentReceived
[DispatchShipment] → ShipmentDispatched

步骤4:添加读模型(绿色)

每个命令需要什么信息?

对每个命令,问:
- 用户需要看到什么数据?
- 需要什么验证数据?
- 什么视图支持这个操作?

添加读模型在填充它们的事件下方:
OrderPlaced → [OrderConfirmationView]
ShipmentDispatched → [TrackingDashboard]

步骤5:识别自动化

什么自动发生?

寻找:
- 触发其他事件的事件
- 与外部系统的集成
- 基于时间的规则
- 业务政策

示例:
PaymentReceived → ⚡ ReserveInventoryPolicy → InventoryReserved

事件模型模板

# 事件模型:[流程名称]

## 概述
[这个流程实现什么]

## 参与者
- [用户类型1]
- [用户类型2]
- [外部系统]

## 事件模型图

```text
时间 ──────────────────────────────────────────────────────────────►

命令(蓝色)
┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐
│ 命令1   │    │ 命令2   │    │ 命令3   │    │ 命令4   │
└────┬────┘    └────┬────┘    └────┬────┘    └────┬────┘
     │              │              │              │
     ▼              ▼              ▼              ▼
事件(橙色)
┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐
│ 事件1   │───►│ 事件2   │───►│ 事件3   │───►│ 事件4   │
└─────────┘    └─────────┘    └─────────┘    └─────────┘
     │              │              │              │
     ▼              ▼              ▼              ▼
读模型(绿色)
┌─────────┐    ┌─────────┐    ┌─────────┐    ┌─────────┐
│ 视图1   │    │ 视图2   │    │ 视图3   │    │ 视图4   │
└─────────┘    └─────────┘    └─────────┘    └─────────┘

命令详情

命令 输入 产生事件 所需读模型
[名称] [数据] [事件] [视图]

事件详情

事件 数据 触发者 更新
[名称] [字段] [命令/自动化] [读模型]

读模型详情

读模型 目的 更新事件
[名称] [它回答的查询] [事件列表]

自动化

自动化 触发事件 动作 产生
[名称] [事件] [它做什么] [事件/副作用]

模式和指南

给定/当/时规范

每个切片可以表达为:

给定:[读模型状态 / 上下文]
当:[命令执行时]
时:[产生事件]
  且:[读模型更新]

示例:
给定:购物车存在且有商品
当:执行下订单命令时
时:记录OrderPlaced事件
  且:更新OrderSummaryView
  且:触发InventoryReservationRequested事件

切片(垂直特性)

切片包括一个特性的所有内容:

┌─────────────────────────────┐
│         切片1               │
│  ┌─────────────────────┐    │
│  │ 命令:下订单         │    │
│  └─────────────────────┘    │
│  ┌─────────────────────┐    │
│  │ 事件:OrderPlaced   │    │
│  └─────────────────────┘    │
│  ┌─────────────────────┐    │
│  │ 视图:订单摘要       │
│  └─────────────────────┘    │
└─────────────────────────────┘

每个切片可独立实施和测试。

蓝图(实施指南)

事件模型成为实施蓝图:

1. 命令 → API端点 / 用户界面组件
2. 事件 → 事件存储模式
3. 读模型 → 数据库表 / 视图
4. 自动化 → 事件处理器 / 政策

每个切片直接映射到代码。

工作流

创建事件模型时:

  1. 定义范围:我们建模什么流程?
  2. 脑力激荡事件:列出所有状态变化
  3. 安排时间线:按时间顺序排列事件
  4. 添加命令:什么触发每个事件?
  5. 添加读模型:什么数据支持每个命令?
  6. 识别自动化:什么自动发生?
  7. 与利益相关者验证:这匹配现实吗?
  8. 定义切片:分组为可实施特性

用户界面

当用户直接调用时,此技能为业务过程创建事件模型。

执行工作流

  1. 解析参数 - 提取流程名称、深度级别(概览/标准/详细)和输出格式(ascii/mermaid/两者)。如果未提供流程,询问用户。
  2. 研究上下文 - 使用MCP服务器理解此类过程的常见模式。
  3. 创建事件模型 - 遵循5步过程:脑力激荡事件、安排时间线、添加命令(蓝色泳道)、添加读模型(绿色泳道)、识别自动化。
  4. 定义切片 - 分组为可实施的垂直切片,带给定/当/时规范。
  5. 生成输出 - 产生视觉图、命令表、事件表、读模型表、自动化和实施切片。

参考资料

详细指导:


最后更新: 2025-12-26