Estou procurando uma maneira de projetar um aplicativo ddd com convenção sobre configuração.
Digamos que um "Cliente" agregado tenha um comando definido "FillProfile". Ele irá gerar logicamente um evento "ProfileFilled".
Existem casos em que um comando gera mais que um evento ou em que um comando gera eventos diferentes com base em alguma lógica? Ou esse é sempre um relacionamento 1 - 1 (1 comando sempre gera nenhum, ou um único evento de um determinado tipo).
Estou perguntando isso, porque se isso é um fato, que um comando sempre gera o mesmo evento, posso construir meu sistema de convenções sobre esse fato. Eu sei que "RaiseEvent" resultará em "EventRaised" ...
domain-driven-design
cqrs
event-sourcing
Ludovic C
fonte
fonte
Respostas:
Como você marcou sua pergunta com "CQRS", acho que você quer dizer eventos em um contexto "CQRS e fornecimento de eventos", como descrito aqui . Em deste tutorial , a diferença entre os eventos e comandos é bem explicado:
eventos capturam as "coisas que podem acontecer" elementares em seu sistema, do ponto de vista do sistema.
comandos são definidos pelo que o usuário considera uma operação, do seu ponto de vista
E embora isso geralmente leve a alguns comandos e eventos com uma correspondência 1: 1, esses diferentes pontos de vista podem levar a comandos que disparam mais de um evento ou a eventos diferentes, dependendo dos parâmetros de comando. Posso até imaginar casos em que um comando não gera um evento, mas esse seria um caso muito excepcional, não muito típico.
Por exemplo, o tutorial menciona eventos
e comandos
Aqui, o comando "OpenTab" levará a um evento "TabOpened", mas o comando PlaceOrder levará aos eventos "DrinksOrdered", "FoodOrdered" ou ambos.
De fato, se você estiver projetando um novo sistema "do zero", tente projetá-lo com uma correspondência 1: 1 entre comandos e eventos e veja quão bem isso é dimensionado quando o sistema se torna maior. Você pode até tentar uma abordagem híbrida: uma lista de eventos e comandos com uma correspondência 1: 1, juntamente com alguns comandos adicionais combinados. Apenas tente até que ponto isso o leva para o sistema específico que você está projetando.
fonte
Normalmente, um comando leva a um evento. Mas, em alguns casos, também pode ser mais de um, depende da sua implementação.
Seu comando chama outros comandos e cada um deles aciona eventos próprios. Ou seu comando executa tarefas diferentes por si só e emite vários eventos. Por exemplo:
RegisterUserCommand
fonte
UserWasAddedToCrm
? Reescrever todo o fluxo?Um comando pode gerar vários eventos. É simplesmente conclusão lógica de um fato:
Composite command
existe.Digamos que você tenha dois comandos, cada um levantando um evento. Em seguida, você cria um comando composto desses dois. Do ponto de vista de alguém usando o comando composto, parece que o comando gerou dois eventos.
Portanto, não há nada que impeça que você tenha um único comando gerando vários eventos (ou mesmo nenhum).
fonte