Sistema CQRS ocasionalmente conectado

Problema:

Dois funcionários (A e B) ficam off-line ao mesmo tempo enquanto editam o cliente nº 123, digamos a versão nº 20, e enquanto off-line continuam fazendo alterações ...

Cenários:

1 - Os dois funcionários editam o cliente nº 123 e fazem alterações em um ou mais atributos idênticos.

2 - Os dois funcionários editam o cliente nº 123, mas NÃO fazem as mesmas alterações (eles se cruzam sem tocar).

... ambos retornam on-line, o primeiro funcionário A acrescenta, alterando o cliente para a versão 21, depois o funcionário B, ainda na versão 20

Questões:

Quem são as mudanças que mantemos no cenário 1?

Podemos fazer uma mesclagem no cenário 2, como?

Contexto:

1 - Sistema de estilo CQRS + Event Sourcing

2 - Use o Event Sourcing Db como uma fila

3 - Consistência eventual no modelo de leitura

4 - APIs RESTful

EDIT-1: Esclarecimentos com base nas respostas até agora:

Para executar a mesclagem com granulação fina, precisarei ter um comando para cada campo em um formulário, por exemplo?

Acima, os comandos refinados para ChangeName, ChangeSupplier, ChangeDescription etc., cada um com seu próprio carimbo de data / hora permitiriam a mesclagem automática no evento A & B, ambos atualizados ChangedName?

Edit-2: Acompanhamento com base no uso de um armazenamento de eventos específico:

Parece que vou usar o @ GetEventStore para a persistência dos meus fluxos de eventos.

Eles fazem uso da simultaneidade otimista da seguinte maneira:

Cada evento em um fluxo incrementa a versão do fluxo em 1

As gravações podem especificar uma versão esperada, usando o cabeçalho ES-ExpectedVersion nos gravadores

-1 especifica que o fluxo ainda não deveria existir

0 e acima especifica uma versão do fluxo

As gravações falharão se o fluxo não estiver na versão, você tenta novamente com um novo número de versão esperado ou reprocessou o comportamento e decidiu que não há problema se você escolher.

Se nenhuma versão ES-Expected especificada, o controle de simultaneidade otimista será desativado

Nesse contexto, a simultaneidade otimista não se baseia apenas no ID da mensagem, mas também no evento #

questionAnswers(4)

yourAnswerToTheQuestion