我应该在每个事件上更新读取模型吗

Should I update read model on each event

我有 Customer 个读取模型需要在 NewOrderEvent 之后更新。

我想了解一件事,我是否应该在每个事件上更新我的阅读模型。或者我需要重播所有事件并替换读取模型。

我现在正在做的是:

  1. 节省NewOrderEvent
  2. 获取或创建Customer读取模型
  3. 调用 Customer.ApplyEvent(NewOrderEvent) 改变 Customer 状态。
  4. 保存Customer读取模型

我是不是漏掉了什么?

我觉得不错。您可能决定重播事件流,以便仅在您向其引入新内容时重新创建读取模型。

有些人会在架构更改时重建读取模型,但在许多情况下,您可以为此使用迁移。真的取决于您的应用程序。

通常是的,你想在每次有事件时更新读取模型。但是,这只是一个简单的 CRUD 操作,一个数据库更新。当您想要(重新)生成一个新的读取模型时,就会完成事件的重播,因为您可能有数百万个事件并且可能是一个非常长的 运行 操作。

顺便说一句,apply 的东西应该只保留给命令模型,以避免混淆。您将事件应用于域聚合根(实体),但您使用事件作为读取模型更新的数据源。