我們使用NEventStore(藝術家,以前稱爲Jonathan Oliver的EventStore)來存儲我們的CQRS事件。我想知道是否有必要創建一個新版本的事件,如果我們想添加一個新的屬性到事件。爲現有CQRS事件添加更多屬性
我知道我們不應該重命名一個現有的屬性,因爲這會在從EventStore讀取事件時產生問題。但是,如果我們只是添加新的屬性,它會產生任何問題?
我們使用NEventStore(藝術家,以前稱爲Jonathan Oliver的EventStore)來存儲我們的CQRS事件。我想知道是否有必要創建一個新版本的事件,如果我們想添加一個新的屬性到事件。爲現有CQRS事件添加更多屬性
我知道我們不應該重命名一個現有的屬性,因爲這會在從EventStore讀取事件時產生問題。但是,如果我們只是添加新的屬性,它會產生任何問題?
取決於您如何序列化消息。換句話說,最好的方式來描述這個(/搜索一個現有的答案)是確定你如何序列化消息,然後找出這個機制如何處理這個問題。
假設它是JSON與JSON.NET和簡單波蘇斯,那麼答案是,添加屬性的處理很乾淨 - 在沒有任何自定義(這是非常可行的),新的領域進來枝條default(T)
,即null
或0
爲每個相關值。
我第二個答案,這是我採用奧利弗的EventStore/JSON.NET的方法,它運作良好。 我要添加的唯一的事情是,您需要確保事件的任何處理程序都考慮到舊事件中的空屬性。 – danielfishr
Ruben, Jonathan Olivers EventStore看起來像是在處理新的屬性。 我試着給事件添加新的屬性,它工作正常。舊事件的屬性值爲null,我必須在事件處理程序中處理這些屬性(如Daniel提到的)。 但我想100%肯定它就是這樣,並且將來也會如此。 有人知道EventStore是如何實現序列化的嗎? – Sachin
@Sachin的底線是NEventStore完全按照您配置的方式處理東西,所以......您是如何配置它的(正如我所說的,我的猜測是您剪切並粘貼了東西,最後是使用NewtonSoft JSON.Net的JSON你需要問這個問題 - 它有很好的文檔)。我個人會吮吸它,並在測試中看到 - 無論如何,你需要整理你的測試故事,所以去做吧! –
順便說一句,如果你想自由能夠改變事件的名稱和事件的屬性,你可以看看使用Protobuf的序列化。有一個.NET的實現。我們正在使用NEventStore在我們的項目上使用它。在保存EventMessage之前,您可以將其Body設置爲一個字節數組,這是您使用Protobuf序列化的應用程序特定事件。當你正在閱讀事件時,反序列化也是如此。 – jacderida