【发布时间】:2015-09-28 08:12:57
【问题描述】:
我已经阅读了几篇关于 CQRS 的博客,所有这些博客都解释说,在写入端,事件会持久保存在事件存储中,并且根据请求,事件会被检索并在聚合上重放。
我的问题是为什么读取端不需要聚合事件重播?
【问题讨论】:
标签: domain-driven-design cqrs event-sourcing
我已经阅读了几篇关于 CQRS 的博客,所有这些博客都解释说,在写入端,事件会持久保存在事件存储中,并且根据请求,事件会被检索并在聚合上重放。
我的问题是为什么读取端不需要聚合事件重播?
【问题讨论】:
标签: domain-driven-design cqrs event-sourcing
因为您的读取端不使用聚合。
读取端被实现为投影,它根据聚合发出的事件流计算当前状态,并将当前状态保存在一些持久存储或内存中。读取端的 while 点是让客户端可以随时使用当前状态。
【讨论】:
我想在 Jakub Konecki 解释中添加示例。
假设您使用事件溯源对银行账户进行建模。该帐户上的每个操作都会导致事件被持久化。几年后,您有数百个事件与该银行帐户相关联。现在,如果您想显示该帐户的余额,您将重播所有事件以计算余额?如果有很多账户,重播事件只是为了计算余额将成为应用程序的性能瓶颈。我们甚至没有提到需要从银行账户显示和描述账户当前状态的其他信息。
这就是我们在读取端存储聚合状态快照的原因,因为读取端主要用于演示目的。我们希望保持系统的这部分简单。
【讨论】: