关于 cqrs-event-sourcing
面向系统设计团队的 CQRS 与 Event Sourcing 实践指南,涵盖命令与查询分离、不可变事件历史、投影、一致性和领域建模。
主要功能
- 01分离命令与查询
- 02以不可变事件记录状态
- 03构建读模型投影
- 04一致性与聚合设计指导
- 05提供实现参考资料
适用场景
- 01设计具备审计轨迹的系统
- 02查询历史时点的状态
- 03扩展读写模式差异显著的系统
- 04构建事件驱动应用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nickcrew/ claude-cortex --skill cqrs-event-sourcing安装后在 Claude Code 中输入/cqrs-event-sourcing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/best-practices.mdconsistency-patterns.mdcqrs-patterns.mdevent-sourcing.mdevent-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 Framework | skills/cqrs-event-sourcing/references/event-store-tech.md |
| 一致性模式 | skills/cqrs-event-sourcing/references/consistency-patterns.md |
| 最佳实践清单 | skills/cqrs-event-sourcing/references/best-practices.md |
工作流
- 识别 CQRS/ES 是否适用(是否需要高审计要求、时间查询或高扩展性)
- 设计 表达用户意图的命令
- 定义 作为不可变事实的事件(使用过去时命名)
- 实现 作为一致性边界的聚合
- 创建 针对特定查询需求优化的投影
- 处理 限界上下文之间的最终一致性
常见错误
- 在简单的 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