根据CQRS à la Greg Young,事件处理程序(以及下游事件非规范化程序)对事件发布者之前发布的传入事件做出反应。
现在让我们假设在运行时我们想要添加一个新的事件非规范化器:基本上,这很容易,但它需要将其数据转换为当前状态。
这样做的最佳方式是什么?
我应该向事件存储发送无序请求并询问之前发出的所有事件吗?
或者有更好的方法吗?
答案 0 :(得分:4)
您可以针对新处理程序获取并重放所有(必需的)事件。这可以在一个单独的过程中完成,因为您基本上想要的是将持久化视图模型置于适当的状态。
查看Rinat Abdullin的Lokad.CQRS示例项目以获取生产示例。特别是SaaS.Engine.StartupProjectionRebuilder
可能是一个有趣的来源,即使它相当复杂。
答案 1 :(得分:4)
还可以构建投影,以便他们记住他们最后看到的事件。然后在任何创业公司,他们要求这个事件和所有前进。重新开始一个旧的投影并建立一个新投影然后变得大致相同。
答案 2 :(得分:1)
如果您接受有界上下文复杂集成,则可能需要删除整个读取模型并重建它。