2010-03-29 94 views
6

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

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

任何帮助?

回答

3

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

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

  2. 将转换器的每个版本都保存在代码中,转换器将收到一个Document(一棵树,就像一个Xml文档或JSon对象),并将修改它以提供构建最新版本所需的信息。

这一切都取决于您对反序列化管道的控制。

+0

有道理。看到一些示例代码会很酷。有没有什么? – 2010-04-14 16:45:29

+0

能否请您在域模型或事件中显示一些更改的示例以及如何处理? – Khaled 2011-01-14 18:35:01