CQRS事件版本控制

时间:2010-03-29 22:20:35

标签: events versioning cqrs

  版本

  如果您的事件发生了变化,您将创建该事件的新版本,并保留旧版本。为了使您的域代码形式在处理所有版本的事件时变得臃肿,您基本上会引入一个组件,将事件从之前版本转换为更新版本,然后将其应用于域。请记住,事件是您域中实际发生的事情,因此在大多数情况下,已弃用事件中的信息很有价值。

我还没有找到任何这方面的例子。

有任何帮助吗?

1 个答案:

答案 0 :(得分:3)

处理事件转换有两种主要方法。两者都发生在事件反序列化期间:

  1. 您可以添加包含版本号的新类(SomethingHappened,SomethingHappened2,SomethingHappened3)。解串器将实例化并填充类,将其传递给转换器以在其更高版本中获取相同的事件,这里是SomethingHappened3。 问题之一是您还必须更新事件处理程序以使用事件的最新版本。 为了缓解这种情况,您可以使用SomethingHappened始终是最后一个版本的约定。转到v2时,将SomethingHappened重命名为SomethingHappened1并创建一个将成为v2的SomethingHappened。要做到这一点,你需要控制从序列化事件创建的类,因为序列化的类名不包含版本号,你应该将它存储在一边。

  2. 相反,在代码中保留每个版本的类,转换器将接收一个Document(一个树,如Xml文档或JSon对象),并将修改它以提供构建上一个版本所需的信息。 / p>

  3. 所有这些取决于您对反序列化管道的控制。