如何使用Event Sourcing模式处理事件处理程序中的代码修改

时间:2012-04-08 14:16:06

标签: c# design-patterns event-sourcing

我正在使用事件采购模式,有一件事让我烦恼。

如果我更改某些事件处理程序的源代码会发生什么,下次我将重建对象状态(重放事件)我可能会得到完全不同的对象,或者更糟糕的是,我可以在其中一个中得到任何异常情况处理程序做一些规则检查。

这是否意味着事件处理代码应该是不可变的? (一旦你写了它,你永远不会再触摸它)。我真的不喜欢这个想法。

经过不长时间的研究和思考,我得出结论,事件是一条消息,就像SOA中的任何消息一样,它应该被版本化。

1 个答案:

答案 0 :(得分:1)

我假设我们正在讨论C#4.0中http://www.martinfowler.com/eaaDev/EventSourcing.html的实现。

一般来说,作为图书馆作家,如果你制作公共方法,财产或事件,你向消费者承诺你不会改变它。

如果您希望在事件传递的对象类型中增加灵活性,请发送一个类型为对象的arg,并在处理时使用反射来决定您收到的内容,并正确发送。

规则检查和异常传播可以通过Calcelable事件处理,也可以通过简单打包并在arg中发送异常来处理。但你必须问自己 - 这些事情如何影响观察对象的状态?