Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Command Handler

Fala Mestre,

Então.. Todo command agora será um DTO, correto? Eu fiz vários "marabalismos mentais" para enxergar uma grande vantagem da separação entre o command e command handler e em todos a adição de complexidade não parece superar alguma possível vantagem, até por que não é bem uma separação de responsabilidades.. Queria saber se nesse exemplo é dificil realmente observar uma grande vantagem ou eu que não enxerguei muito bem isso.

Uma coisa que eu notei que é eu posso fazer várias gerações de pedidos com o mesmo handler, trocando apenas seu command, mas sei que esse não é o ponto chave.

E uma útima coisa, quando o command handler vale a pena ser usado? Sempre quando para execução de uma atividade eu tenho que orquestrar vários outros serviços? É impressão minha ou o handler parece bastante com um controller?

3 respostas
solução!

Ótimas perguntas, Diego.

  1. Sim, os commands viram DTOs nesse caso;
  2. Realmente as vantagens são obscuras. A principal vantagem que eu encontrei é que você deixa o construtor do CommandHandler para receber dependências, e no método de execução você recebe um parâmetro só, que é o DTO. Dessa forma você ganha robustês de tipo. Mas nada te impede de receber os parâmetros separados no método de execução, sem o DTO. Outra vantagem é que componentes de CommandBus (como Tactitian) partem do princípio que você usa esses DTOs para definir qual Handler executar.
  3. Sim, pode fazer várias chamadas ao mesmo handler com commands diferentes;
  4. Vale a pena criar um command handler sempre que a ação precisar ser executada a partir de mais de um mecanismo de entrega, como Forms da Web, API, CLI, Fila de mensagem, etc.

Espero ter esclarecido, man.

Abração e bons estudos.

Obrigado mestre.

Acho que outro ponto, caso eu tenha captado corretamente, é que com a separação eu sei exatamente como deve ser a criação do handler com suas dependências e sabendo isso posso tirar proveito de um DI container, por exemplo. Posteriormente quando eu tiver os dados necessários eu monto o command e envio para o handler que já está criado.

Perfeito, Diego! Exatamente.