如何使用事件溯源模式处理事件处理程序中的代码修改
本文关键字:程序 代码 修改 事件处理 处理 何使用 事件 溯源 模式 | 更新日期: 2023-09-27 18:30:21
我正在开始使用事件溯源模式,有一件事困扰着我。
如果我更改某些事件处理程序的源代码会发生什么,下次我将重建对象状态(重播事件)时,我可能会得到完全不同的对象,或者更糟糕的是,我无法得到任何原因,因为其中一个处理程序执行一些规则检查。
这是否意味着事件处理代码应该是不可变的?(一旦你写了它,你就再也不会碰它了)。我真的不喜欢这个想法。
经过不久的研究和思考,我得出的结论是,事件是一个消息,就像SOA中的任何消息一样,它应该被版本控制。
我假设我们正在讨论 C# 4.0 中 http://www.martinfowler.com/eaaDev/EventSourcing.html 的实现。
一般来说,作为一个图书馆作者,如果你做了一个公共的方法、属性或事件,你就向消费者承诺你不会去改变它。
如果您希望在事件传递的对象类型方面增加灵活性,请发送 object 类型的 arg,并在处理时使用反射来确定您收到的内容,并正确调度它。
规则检查和异常传播可以通过 Calcelable 事件来处理,也可以通过在 arg 中简单地打包和发送异常来处理。 但你必须问问自己——这些东西如何影响被观察物体的状态?