SuperAPI AI 工具集

eventmodeling-validating-event-models

编程与开发

查看项目

更新于 10-16 04:16

技能介绍

用途

本技能是事件建模流程的第 9 步,用于对事件溯源(Event Sourcing)模型进行校验,确保模型完整、正确,并遵循纯事件溯源原则(每个命令使用最小状态)。它面向已经产出的领域事件模型,执行一次全面的验证,并给出问题清单、评分与改进建议。

核心架构规则(不可协商)

关键:每个命令必须拥有自己的最小状态投影(不是 DDD 聚合)。DDD 所称的“聚合根”实际上是一个读模型。命令处理器绝不能使用读模型进行校验。这是首要校验关卡,若模型违反此规则,立即判定校验失败。

违规示例(校验失败): OrderAggregate { orderId, customerId, items[], total, status, paymentId, address, shippedAt, cancelledAt, ... } ↑ 这是读模型,不是命令状态 被以下命令使用:ConfirmOrder、ShipOrder、CancelOrder、ApproveReturn 拒绝:这是 DDD 聚合模式(读模型),不是事件溯源命令状态

正确模式(通过校验): ConfirmOrderState { status, orderId } ShipOrderState { status, orderId, paymentId } CancelOrderState { status, orderId, createdAt } ApproveReturnState { status, orderId, paymentId } 通过:每个命令都有最小状态

OrderSummaryView { orderId, customerId, items[], total, status, paymentId, ... } 可以:这是供 UI 查询的读模型,与命令状态分离

主要能力

校验覆盖以下方面:

  1. 事件流完整性检查:每个事件流是否有清晰流名(身份)、至少一个事件类型、初始事件、状态转换记录、确定性状态投影;每个事件是否使用过去时、只含事实(无计算字段)、数据不可变、语义唯一、包含时间戳/因果信息;每个状态投影是否可由事件确定性重建、重放逻辑是否纯(无副作用)、是否仅用于命令校验、是否可安全丢弃并重新生成;每个命令是否有清晰输入参数、校验规则、结果事件或拒绝原因、纯逻辑。

  2. 一致性检查:事件与事件流映射、命令结果、确定性投影、投影无副作用、事件不可变性、命名一致性(命令用动词、事件用过去时、流用实体类型+身份)。

  3. 事件溯源原则合规:事件是事实、事件不可变、事件数据完整、事件中无计算字段、确定性投影、流身份清晰、状态是派生的。

  4. 事件流验证:命令到事件映射、无僵尸命令、事件版本化、补偿事件、跨流通信。

  5. 角色与行为者归属校验:角色目录是否存在、每个命令是否有行为者归属、每个人类角色是否至少有一条命令路径、每个人类角色是否至少有一个读模型、权限边界是否被遵守。若没有角色目录,则拒绝模型;若任何命令缺少行为者归属,则拒绝模型。

  6. 命令状态读模型校验(关键):命名约定合规、命令之间无共享状态、每个命令有自己的状态接口、无完整聚合状态、状态仅用于校验、每个命令状态形状不同。若任何命令与其他命令共享状态,则拒绝模型——关键违规。

  7. 命令与状态校验:基于状态的决策、有效状态转换、前置条件清晰、错误处理。

  8. 投影校验:读模型与命令状态分离、读模型可选、服务真实查询、一致更新、可重新生成。

  9. 问题与建议报告:按严重(必须修复)与警告(应考虑)分类,并给出完整性分析表、事件溯源合规性、校验摘要、下一步建议。

使用方式

当给定一个事件模型时,执行上述全面校验,并输出:

  • 事件模型校验报告(含问题、影响、修复建议)
  • 完整性分析表(流根、命令、事件、状态设计、读模型的状态与细节)
  • 事件溯源合规性(不可变事件、最小命令状态、流根清晰度、事件溯源模式、CQRS 分离)
  • 校验摘要(总体状态、阻塞项、建议修复、是否可进入代码生成)
  • 下一步(与领域专家评审建议、应用关键修复、进入代码生成)
  • 校验评分(完整性、一致性、正确性、清晰度、投影/命令状态合规性,各 0-100)

适用场景

适用于事件建模流程中,在完成事件模型设计后、进入代码生成之前,对模型进行质量把关。尤其适合需要确保命令状态最小化、命令与读模型分离、角色归属明确的事件溯源项目。

限制

本技能只做校验与报告,不负责生成代码。校验结果依赖是否存在角色目录等前置产物;若缺少角色目录或命令缺少行为者归属,会直接拒绝模型。资料未提供具体收费、价格、平台或运行环境信息。