我目前使用Scala和Eventuate,但我認爲這個問題適用於任何情況下采購環境:如何處理事件源應用程序中的域更改?
比方說,你有以下事件:case class UserAdded(user: User)
,並User
是case class User(username:String, birthday: Date)
。
您的應用已運行一段時間,現在您需要收集用戶的電話號碼。所以現在我們需要將User
更改爲case class User(username:String, birthday: Date, phoneNumber: String)
。
當事件重播時,它會拋出錯誤,因爲過去的事件沒有phoneNumber
。你通常如何在事件源應用程序中解決這個問題?
我的第一個想法是爲事件存儲中的所有事件設置一個默認值,但是我明白事件源是不可變的,所以我決定聽取更多有經驗的用戶的意見。
任何輸入是非常感謝!
我認爲承認重寫事件流的可能性是一個滑動斜率:在你知道它之前,其他所有部署都需要重寫歷史記錄。 –
@FyodorSoikin Events以強大的方式將數據綁定到代碼,只有歷史重寫可以打破這種耦合,恕我直言。無論如何,至少應該知道這個戰術模式 –
真棒書!我不知道。它涵蓋了深入的問題,謝謝! –