mcpField
C
cqrs-event-sourcing

cqrs-event-sourcing

github.com/nickcrew开发6293 次安装17 周前更新
代码仓库

关于 cqrs-event-sourcing

面向系统设计团队的 CQRS 与 Event Sourcing 实践指南,涵盖命令与查询分离、不可变事件历史、投影、一致性和领域建模。

主要功能

  1. 01分离命令与查询
  2. 02以不可变事件记录状态
  3. 03构建读模型投影
  4. 04一致性与聚合设计指导
  5. 05提供实现参考资料

适用场景

  1. 01设计具备审计轨迹的系统
  2. 02查询历史时点的状态
  3. 03扩展读写模式差异显著的系统
  4. 04构建事件驱动应用

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nickcrew/claude-cortex --skill cqrs-event-sourcing

安装后在 Claude Code 中输入/cqrs-event-sourcing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
best-practices.md
consistency-patterns.md
cqrs-patterns.md
event-sourcing.md
event-store-tech.md

详细介绍

CQRS 与事件溯源模式

关于实现命令查询职责分离(CQRS)和事件溯源模式的专业指导,助你构建可扩展、可审计的系统,实现完整的历史追踪,并优化读写模型。

何时使用此技能

  • 构建需要完整审计跟踪和合规性保障的系统
  • 实现时间查询(“显示时间 T 时的状态”)
  • 设计具有复杂领域逻辑的高扩展性应用
  • 创建读写模式显著不同的系统
  • 构建支持历史重放能力的事件驱动架构
  • 实现需要多个读模型投影的系统
  • 设计必须清楚了解“发生了什么”的应用
  • 构建需要解决冲突的协作系统

核心原则

1. 命令查询分离

将改变状态的操作(命令)与读取状态的操作(查询)分开。

命令(写)查询(读)
表达意图(CreateOrder、UpdatePrice)返回数据,绝不改变状态
可以被拒绝(验证失败)可以缓存和优化
返回成功或失败,而非数据可针对不同需求使用多个模型
改变系统状态与写入最终一致
2. 事件作为事实来源

将状态变更存储为不可变事件,而不是当前状态快照。

传统方式:存储当前状态 → UPDATE users SET email = '[email protected]' 事件溯源:存储已发生的事件 → APPEND UserEmailChanged event

结果:完整历史记录、时间查询、审计跟踪

3. 最终一致性

为提升可扩展性,接受写模型与读模型之间的暂时不一致。

4. 与领域驱动设计集成
  • 聚合强制执行业务不变量
  • 事件表示领域事实
  • 命令表达领域操作
  • 限界上下文定义一致性边界

快速参考

任务加载参考资料
CQRS 实现模式skills/cqrs-event-sourcing/references/cqrs-patterns.md
事件溯源与快照skills/cqrs-event-sourcing/references/event-sourcing.md
EventStoreDB 与 Axon Frameworkskills/cqrs-event-sourcing/references/event-store-tech.md
一致性模式skills/cqrs-event-sourcing/references/consistency-patterns.md
最佳实践清单skills/cqrs-event-sourcing/references/best-practices.md

工作流

  1. 识别 CQRS/ES 是否适用(是否需要高审计要求、时间查询或高扩展性)
  2. 设计 表达用户意图的命令
  3. 定义 作为不可变事实的事件(使用过去时命名)
  4. 实现 作为一致性边界的聚合
  5. 创建 针对特定查询需求优化的投影
  6. 处理 限界上下文之间的最终一致性

常见错误

  • 在简单的 CRUD 应用中使用 CQRS(过度设计)
  • 聚合过大,跨越多个一致性边界
  • 发布后修改或删除事件
  • 聚合处理前跳过命令验证
  • 事件处理器缺少幂等性
  • 缺少事件架构演进的版本控制策略
  • 聚合之间紧密耦合(仅使用 ID 引用)

资源

  • 书籍:“Implementing Domain-Driven Design”(Vernon)、“Event Sourcing & CQRS”(Betts 等)
  • 网站:cqrs.wordpress.com、eventstore.com/blog、axoniq.io/resources
  • 工具:EventStoreDB、Axon Framework、Marten、Eventuous
  • 模式:事件溯源、CQRS、流程管理器、Saga、快照

评论

支持 Markdown