关于 event-sourcing
event-sourcing 是一项指导系统以不可变事件序列记录状态变化,而非仅保存当前状态的技能。内容涵盖事件存储、投影、快照,以及事件版本管理和并发处理实践。
主要功能
- 01以不可变事件序列存储状态
- 02TypeScript 和 PostgreSQL 事件存储
- 03用于读模型的投影
- 04提升性能的快照
- 05事件版本管理与并发指导
适用场景
- 01维护审计记录
- 02查询过去某时点的状态
- 03实现事件驱动微服务
- 04构建 CQRS 系统
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aj-geddes/ useful-ai-prompts --skill event-sourcing安装后在 Claude Code 中输入/event-sourcing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/event-store-typescript.mdevent-store-with-postgresql.mdprojections-read-models.mdsnapshots-for-performance.mdscripts/scaffold-analysis.shtemplates/notebook-template.py详细介绍
事件溯源
目录
概述
将状态变更存储为一系列事件,而不是当前状态,以支持时间查询、审计跟踪和事件重放。
适用场景
- 需要审计跟踪
- 时间查询(任意时间点的状态)
- 事件驱动的微服务
- CQRS 实现
- 金融系统
- 复杂的领域模型
- 调试和分析
- 合规与监管
快速入门
最简可运行示例:
interface DomainEvent {
id: string;
aggregateId: string;
aggregateType: string;
eventType: string;
data: any;
metadata: {
userId?: string;
timestamp: number;
version: number;
};
}
interface Aggregate {
id: string;
version: number;
}
class EventStore {
private events: DomainEvent[] = [];
async appendEvents(
aggregateId: string,
expectedVersion: number,
events: Omit<DomainEvent, "id" | "metadata">[],
// ... (see reference guides for full implementation)
参考指南
references/ 目录中的详细实现:
| 指南 | 内容 |
|---|---|
| 事件存储(TypeScript) | 事件存储(TypeScript) |
| 投影(读取模型) | 投影(读取模型) |
| 使用 PostgreSQL 的事件存储 | 使用 PostgreSQL 的事件存储 |
| 用于提升性能的快照 | 用于提升性能的快照 |
最佳实践
✅ 应该
- 不可变地存储事件
- 为事件设置版本
- 使用乐观并发控制
- 创建快照以提升性能
- 使用投影进行查询
- 保持事件小巧且专注
- 添加元数据(时间戳、用户等)
- 处理事件版本管理/迁移
❌ 不应该
- 修改过去的事件
- 只存储当前状态
- 跳过并发检查
- 为读取操作查询事件存储
- 让事件过于庞大
- 忽略事件架构演进
评论
支持 Markdown