A diferença entre um comando e um evento na comunicação de barramento parece um pouco vaga para mim. Eu sei que os comandos devem ser executados apenas uma vez, enquanto um evento pode ser manipulado várias vezes, mas ainda não tenho certeza de quando usar um comando ou um evento.
Vejamos um exemplo:
Quando um novo usuário se registra em um aplicativo Web, devemos criar uma conta para ele e enviar um email de confirmação.
Criando a conta - este parece ser o local certo para enviar um CreateUserCommand
para o barramento e deixar que um componente especializado lide com isso.
Ou talvez isso nem deva ser implementado com uma comunicação de barramento assíncrona? Queremos que o usuário possa fazer login no aplicativo imediatamente. Com o barramento, não temos garantia de quando o comando será executado.
Enviando email - depois que o componente cria a conta, vejo duas possibilidades
- Envie outro comando para o barramento
SendConfirmationEmailCommand
- Publicar um evento
UserAccountCreatedEvent
E deixar o componente remetente de e-mail agarrá-lo e fazê-lo funcionar.
Por um lado, desejo que o email de confirmação seja enviado apenas uma vez (use um comando); por outro, acredito que possa haver vários componentes interessados em usuários recém-registrados. Um registrador ou talvez um remetente de SMS.
Como você o implementaria?