2012-04-08 48 views
1

我正在使用事件采购模式,有一件事情让我感到困扰。如何处理事件处理程序中的代码修改与事件采购模式

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

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

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

回答

1

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

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

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

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

+0

我知道开放/封闭的原则。 – 2012-04-08 14:26:39

+0

顺便说一下,在http://www.martinfowler.com/eaaDev/EventSourcing.html上有关于代码更改主题的Fowler思想,通过阅读它可以让我想到在我的代码中引入事件版本控制。 – 2012-04-08 14:40:49