如何在CQRS系统中引入新的事件非规范化器?

时间:2012-11-18 17:13:20

标签: cqrs

根据CQRS à la Greg Young,事件处理程序(以及下游事件非规范化程序)对事件发布者之前发布的传入事件做出反应。

现在让我们假设在运行时我们想要添加一个新的事件非规范化器:基本上,这很容易,但它需要将其数据转换为当前状态。

这样做的最佳方式是什么?

我应该向事件存储发送无序请求并询问之前发出的所有事件吗?

或者有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

您可以针对新处理程序获取并重放所有(必需的)事件。这可以在一个单独的过程中完成,因为您基本上想要的是将持久化视图模型置于适当的状态。

查看Rinat Abdullin的Lokad.CQRS示例项目以获取生产示例。特别是SaaS.Engine.StartupProjectionRebuilder可能是一个有趣的来源,即使它相当复杂。

答案 1 :(得分:4)

还可以构建投影,以便他们记住他们最后看到的事件。然后在任何创业公司,他们要求这个事件和所有前进。重新开始一个旧的投影并建立一个新投影然后变得大致相同。

答案 2 :(得分:1)

如果您接受有界上下文复杂集成,则可能需要删除整个读取模型并重建它。