Como funciona um ônibus? Quais são as vantagens de apenas gravar eventos diretamente em um armazenamento de eventos?
Na arquitetura acima, em que comandos e consultas são separados (CQRS) e os comandos são implementados usando o Event Sourcing enquanto as consultas são lidas no instantâneo, o que acontece quando os dados precisam ser exibidos durante o início de um comando? (Por exemplo, mostrando dados da conta bancária enquanto um usuário deseja fazer um depósito, com base nesses dados.) Como, na prática, garantimos que os dados exibidos estejam atualizados?
O armazenamento de eventos dependerá do seu aplicativo, mas será muito mais fácil se você usar um armazenamento flexível para seus eventos (para um banco de dados NoSQL, JSON ou XML). O modo como você lida com as atualizações dependerá de vários fatores que você precisa levar em conta, como requisitos de disponibilidade e prazos para atualizações, quantidade de eventos, etc.
Atualize seus eventos quando o aplicativo for atualizado: como parte da implantação de um novo aplicativo, atualize todos os eventos anteriores para o novo esquema
Versão dos seus eventos: tenha um ID de versão no seu evento. Quando um evento é lido no banco de dados, algum pedaço de código sabe como 'atualizar' eventos antigos para a estrutura atual. Como a primeira opção, mas basicamente 'on demand'
Jogue fora seus eventos antigos: quando o aplicativo for atualizado, crie um instantâneo de todas as entidades e jogue fora (ou arquive) os eventos antigos.
Nunca jogue fora eventos antigos: basicamente mantenha 'PurchaseOrder' para sempre. Quando você precisar de outro campo, use um novo evento como "PurchaseOrderWithCouponCode".
Uma saga é basicamente um evento de longa duração cortado em pedaços. Isto pode ser devido a diferentes razões: pode ser porque você quer ter uma ação que resulte em vários eventos tratados em paralelo para evitar o bloqueio com uma transação, porque você precisa coordenar vários sistemas externos ou porque precisa coordenar com eventos que cruzam um contexto limitado. Você precisa persisti-los por esse motivo: uma saga pode ser iniciada, lançar alguns eventos e, em algum ponto não-determinístico, pode ser necessário retomar o lançamento de mais eventos. Udi Dahan tem uma boa introdução sobre isso.
Há muito que se pode dizer sobre os ônibus. Eles abstraem uma grande parte do armazenamento de eventos para você e podem lidar com cenários mais complicados, por exemplo, quando você tem vários aplicativos que precisam trabalhar com o armazenamento de eventos. Para pequenos aplicativos, você pode escrever diretamente no armazenamento de eventos (e o código que faria isso poderia ser considerado um barramento ...)
Resposta curta: você não faz. A terceirização de eventos funciona de várias maneiras porque você é "eventualmente consistente". Neste exemplo, você pode simplesmente exibir uma mensagem para os usuários que pode levar até dez minutos para que os depósitos sejam exibidos ...
Mapeando modelos de domínio para ViewModel Incluindo uma biblioteca para usar uma classe de função / utilitário

Sou Elaine Lopes da Espaco Elaine Lopes e para continuar nosso atendimento através do Whatsapp e Telefone preciso da sua autorização conforme determinação da Lei 13.709/18 - LGPD Saber Mais