mcpField
E
event-sourcing

event-sourcing

github.com/aj-geddes开发373888 次安装34 周前更新
代码仓库

关于 event-sourcing

event-sourcing 是一项指导系统以不可变事件序列记录状态变化,而非仅保存当前状态的技能。内容涵盖事件存储、投影、快照,以及事件版本管理和并发处理实践。

主要功能

  1. 01以不可变事件序列存储状态
  2. 02TypeScript 和 PostgreSQL 事件存储
  3. 03用于读模型的投影
  4. 04提升性能的快照
  5. 05事件版本管理与并发指导

适用场景

  1. 01维护审计记录
  2. 02查询过去某时点的状态
  3. 03实现事件驱动微服务
  4. 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.md
event-store-with-postgresql.md
projections-read-models.md
snapshots-for-performance.md
scripts/
scaffold-analysis.sh
templates/
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