Coloco manipuladores de eventos de domínio na camada Domínio como uma interface de domínio IDomainEventHandler
.
Um exemplo de manipulador de eventos de domínio é uma política que assina determinado evento de domínio para inicializar uma nova transação (por exemplo: para acionar um novo comando de domínio); portanto, faz sentido tê-lo na camada Domínio, pois está relacionado a logíca de negócios.
Podemos pensar em um exemplo em que um pedido é confirmado e, portanto, uma solicitação de fatura deve ser criada. Temos um evento OrderConfirmedEvent
que aconteceu. Uma política em nosso domínio seria responsável por se inscrever neste evento e criar um comando de domínio RequestInvoice
que será tratado pelo manipulador de comandos e tratado por ele de acordo.
Se tivéssemos esse manipulador de eventos na camada de aplicativos, isso significaria que a camada de aplicativos, além de orquestrar as ações do usuário, executaria alguma lógica de negócios, o que parece incorreto.
No entanto, temos