理想情况下,在设计事件模式期间,您的事件中应该有一个version
属性,该属性将表示模式版本,如下所示。每当订阅者挂接到您的事件时,他们将被绑定到特定版本,直到他们需要切换到更新的版本。这样,每次转换到新模式时,您都会在一定的宽限期内继续维护新旧模式,以实现向后兼容性,以允许现有订阅者在不中断的情况下进行更新。
{
version : 1,
orderid : 123455,
customerid : abc@domain.com,
other properties ....
}
{
version : 2,
orderid : 123455,
customerid : 5435gd98, //modification
other properties ....
}
但看起来你错过了现有事件模式中的火车(没有版本控制)。所以现在你至少在最初的某个时候需要一些肮脏的解决方法。但引入版本控制永远不会太晚。首先,您的活动如下所示。请注意,我引入了version
属性,以便任何新订阅者从现在开始都知道这一点,而您现有的订阅者不会同时被破坏,因为现有的事件属性没有改变。同时,您可以通知那些旧订户过渡到新订户。将来,这样的更改会更容易,因为现在您有了版本控制。
{
version : 2,
orderid : 123455,
customerid : abc@domain.com, // for V1 compatibility
// name new customerid field something different, below is just for example
customerid_v2 : 5435gd98, // V2
other properties ....
}
或者它可以像(在嵌套 json 中移动客户详细信息):
{
version : 2,
orderid : 123455,
customerid : abc@domain.com, // for V1 compatibility
customer : {
id : 5435gd98,
email : abc@domain.com
}
other properties ....
}