2012-04-08 47 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