我应该在每个事件上更新读取模型吗
Should I update read model on each event
我有 Customer
个读取模型需要在 NewOrderEvent
之后更新。
我想了解一件事,我是否应该在每个事件上更新我的阅读模型。或者我需要重播所有事件并替换读取模型。
我现在正在做的是:
- 节省
NewOrderEvent
- 获取或创建
Customer
读取模型
- 调用
Customer.ApplyEvent(NewOrderEvent)
改变 Customer
状态。
- 保存
Customer
读取模型
我是不是漏掉了什么?
我觉得不错。您可能决定重播事件流,以便仅在您向其引入新内容时重新创建读取模型。
有些人会在架构更改时重建读取模型,但在许多情况下,您可以为此使用迁移。真的取决于您的应用程序。
通常是的,你想在每次有事件时更新读取模型。但是,这只是一个简单的 CRUD 操作,一个数据库更新。当您想要(重新)生成一个新的读取模型时,就会完成事件的重播,因为您可能有数百万个事件并且可能是一个非常长的 运行 操作。
顺便说一句,apply 的东西应该只保留给命令模型,以避免混淆。您将事件应用于域聚合根(实体),但您使用事件作为读取模型更新的数据源。
我有 Customer
个读取模型需要在 NewOrderEvent
之后更新。
我想了解一件事,我是否应该在每个事件上更新我的阅读模型。或者我需要重播所有事件并替换读取模型。
我现在正在做的是:
- 节省
NewOrderEvent
- 获取或创建
Customer
读取模型 - 调用
Customer.ApplyEvent(NewOrderEvent)
改变Customer
状态。 - 保存
Customer
读取模型
我是不是漏掉了什么?
我觉得不错。您可能决定重播事件流,以便仅在您向其引入新内容时重新创建读取模型。
有些人会在架构更改时重建读取模型,但在许多情况下,您可以为此使用迁移。真的取决于您的应用程序。
通常是的,你想在每次有事件时更新读取模型。但是,这只是一个简单的 CRUD 操作,一个数据库更新。当您想要(重新)生成一个新的读取模型时,就会完成事件的重播,因为您可能有数百万个事件并且可能是一个非常长的 运行 操作。
顺便说一句,apply 的东西应该只保留给命令模型,以避免混淆。您将事件应用于域聚合根(实体),但您使用事件作为读取模型更新的数据源。