问题:
两名员工(A和B)在同时编辑客户#123时下线,例如版本#20,并在离线期间继续进行更改...
场景:
1-两名员工编辑客户#123并对一个或多个相同属性进行更改。
2-两名员工编辑客户#123但未进行相同的更改(他们互相交叉而不接触)。
...然后他们都回到在线状态,第一名员工A附加,从而将客户更改为版本#21,然后是仍处于版本#20的员工B
问题:
在情况1中,我们保留谁的更改?
在情况2中,我们能合并吗?如何操作?
背景:
1- CQRS +事件溯源风格系统
2-使用事件溯源Db作为队列
3-读模型的最终一致性
4-RESTful API
编辑-1:根据目前的答案进行澄清:
为了执行细粒度合并,我需要为表单中的每个字段都有一个命令,例如ChangeName,ChangeSupplier,ChangeDescription等吗?
上面,对于ChangeName,ChangeSupplier,ChangeDescription等的详细命令,每个命令都有自己的时间戳,这将允许在A&B同时更新ChangedName时进行自动合并?
编辑-2:基于使用特定事件存储的后续操作:
看起来我将使用@GetEventStore来持久化我的事件流。
他们如下使用乐观并发:
每个流中的事件都会将流版本号增加1。
写入操作可以指定期望版本,利用写入器上的ES-ExpectedVersion标头
-1表示流不应该已经存在
0及以上表示一个流的版本号
如果流不在该版本,则写入操作将失败,您可以使用新的期望版本号重试或重新处理行为,并决定是否OK。
如果没有指定ES-Expected Version,乐观并发控制将被禁用
在这种情况下,乐观并发不仅基于消息ID,还基于事件编号