Skip to content

Day 21 - 事件溯源(Event Sourcing)

📖 今日目标

  1. 理解事件溯源(Event Sourcing)的概念
  2. 掌握事件溯源的优缺点
  3. 学习事件溯源的实现方式

核心概念

什么是事件溯源?

事件溯源(Event Sourcing) 是通过存储一系列领域事件来记录聚合状态,而不是直接存储当前状态。

传统模式:保存当前状态
事件溯源:保存导致状态的事件序列

关键要点

1. 事件溯源的优势

  • 完整审计:所有状态变更都有记录
  • 时间旅行:可以重建任意时间点的状态
  • 更好的并发:基于事件而非直接修改
  • 易于调试:重放事件重现问题

2. 实现示例

java
// 存储事件而非状态
public class Order {
    private List<OrderEvent> events = new ArrayList<>();
    
    public void place() {
        events.add(new OrderPlacedEvent(...));
    }
    
    public OrderState getState() {
        return OrderState.replay(events);
    }
}

3. 事件存储

java
public interface EventStore {
    void append(String aggregateId, DomainEvent event);
    List<DomainEvent> getEvents(String aggregateId);
}

面试考点

问题:事件溯源的缺点是什么?

答案:

  1. 复杂性:需要处理事件版本升级
  2. 查询困难:需要重建状态才能查询
  3. 存储量大:事件不断累积
  4. 最终一致性:实时状态需要额外处理

适用场景:需要审计、高并发、复杂业务场景。

实践思考

🎯 思考题

在订单系统中使用事件溯源,列出需要存储的关键事件。


📅 学习进度

Day主题状态
01-20战略设计 + 战术 + 架构
21事件溯源(Event Sourcing)
22消息队列与DDD
.........
30复习与总结

本文为DDD 30天学习计划第21天内容

📚 导航

| ← Day 20 - 上一章 | Day 22 - 下一章 →

最后更新: