【发布时间】:2012-04-08 22:51:38
【问题描述】:
我正在尝试使用事件溯源模式,但有一件事情困扰着我。
如果我更改某些事件处理程序的源代码会怎样处理程序进行一些规则检查。
这是否意味着事件处理代码应该是不可变的? (一旦你写了它,你就再也不会碰它了)。我真的不喜欢这个主意。
经过不久的研究和思考,我得出结论,Event 是一个消息,并且像 SOA 中的任何消息一样,它应该是版本化的。
【问题讨论】:
标签: c# design-patterns event-sourcing
我正在尝试使用事件溯源模式,但有一件事情困扰着我。
如果我更改某些事件处理程序的源代码会怎样处理程序进行一些规则检查。
这是否意味着事件处理代码应该是不可变的? (一旦你写了它,你就再也不会碰它了)。我真的不喜欢这个主意。
经过不久的研究和思考,我得出结论,Event 是一个消息,并且像 SOA 中的任何消息一样,它应该是版本化的。
【问题讨论】:
标签: c# design-patterns event-sourcing
我假设我们正在讨论在 C# 4.0 中实现 http://www.martinfowler.com/eaaDev/EventSourcing.html。
一般来说,作为库编写者,如果你创建一个公共方法、属性或事件,你就向消费者承诺你不会去改变它。
如果您想增加事件传递的对象类型的灵活性,请发送一个对象类型的 arg,并在处理时使用反射来确定您收到的内容,并正确分派它。
可以通过 Calcelable 事件来处理规则检查和异常传播,或者通过简单地在 arg 中打包和发送异常来处理。但是你要问自己——这些东西是如何影响被观察物体的状态的?
【讨论】: