知识卡片

事件替代状态

普通读书笔记卡 · 1766.a

内容

直接更新状态会丢失变化原因,只保存事件则保留完整历史。代价是读取时要投射出当前状态,并处理事件版本、顺序和重放成本。关联:[[事件是事实来源]]

参考来源

- 位置:《复杂软件设计之道》第6章《事件溯源》"6.1 什么是事件溯源?"一节(源文件:_chapter_text/ch06.txt) - 结论依据:原文明确"传统架构只保留和维护对象的当前状态,而事件溯源维护状态的所有更改操作",并指出事件溯源"是否为负"等情形需依靠遍历/播放整个事件集合计算,说明保留完整历史的代价是读取需要投射与顺序处理。 - 原始内容:传统架构只保留和维护对象的当前状态,而事件溯源维护状态的所有更改操作。CRUD四个操作中删除和修改用于修改,而事件溯源系统只有一个操作:追加(append-only)或(insert)插入……播放事件方式根据不同的应用而不同,例如根据事件进出明细计算当前余额:这是使用Java 8的流式播放,将事件集合中的事件应用到具体DDD聚合的函数方法,然后进行汇总计算。