根据 CQRS à la Greg Young 的说法,事件处理程序(和下游事件反规范化程序)对事件发布者之前发布的传入事件做出反应。
现在让我们假设在运行时我们要添加新的事件反规范化程序: 基本上,这很容易,但它需要将数据恢复到当前状态。
最好的方法是什么?
我是否应该向事件存储发送无序请求并请求所有以前发出的事件?
或者有更好的方法可以做到这一点吗?
您可以针对新处理程序获取和重播所有(必需的)事件。这可以在单独的过程中完成,因为您本质上想要的是使持久化视图模型进入正确的状态。
查看 Rinat Abdullin 的 Lokad.CQRS 示例项目以获取生产示例。特别是SaaS.Engine.StartupProjectionRebuilder
可能是一个有趣的来源,即使它相当复杂。
人们还可以构建投影,以便他们记住他们上次看到的事件。然后在任何初创公司,他们都要求此事件并全部转发。然后,重新启动旧投影和构建新投影变得大致相同。
如果采用有界上下文复杂集成,则可能需要删除整个读取模型并重新生成它。