Trabalhando com eventos
Em sistemas modernos, orientados a boas práticas de arquitetura como DDD (Domain-Driven Design) e Clean Architecture, eventos são mecanismos fundamentais para modelar mudanças de estado e comunicação assíncrona entre componentes ou sistemas. Um evento representa algo que já aconteceu no domínio da aplicação e que pode interessar a outras partes do sistema ou a serviços externos.
Eventos de Domínio
Eventos de domínio representam algo importante que aconteceu no contexto do domínio da aplicação. Eles são gerados e consumidos dentro do próprio sistema, servindo para propagar mudanças de estado sem criar forte acoplamento entre objetos.
Quando criar um Evento de Domínio:
- Quando uma operação no sistema gera uma mudança relevante no domínio que outras partes do sistema precisam conhecer ou reagir.
- Para manter a coesão do modelo de domínio e permitir que diferentes processos sejam disparados sem dependências diretas.
Manipulador de Eventos de Domínio
Um Domain Event Handler é uma classe que escuta um Evento de Domínio e executa ações específicas em resposta a ele.
Esses manipuladores ajudam a desacoplar ações secundárias do fluxo principal da aplicação (por exemplo, envio de e-mails, notificações, atualização de logs, etc.).
Características principais:
- Reage a um evento, mas não altera o evento.
- Pode acionar operações assíncronas (por exemplo, envio de e-mails, notificações internas).
- Deve ser registrado no mecanismo de publicação de eventos do sistema.
Eventos de Integração
Eventos de Integração são mensagens que informam que algo importante aconteceu e precisam ser compartilhadas com sistemas externos ou outros microserviços.
Diferente dos eventos de domínio, aqui o objetivo é comunicação entre sistemas e sincronização de estados.
Quando criar um Evento de Integração:
- Quando uma mudança no seu sistema precisa ser refletida em outro sistema.
- Quando seu microserviço precisa publicar mudanças para que outros microserviços reajam.
Diferenças principais entre Domain Events e Integration Events:
Aspecto | Evento de Domínio | Evento de Integração |
---|---|---|
Público-alvo | Interno | Externo |
Acoplamento | Baixo (interno) | Necessário (entre sistemas) |
Tempo de processamento | Imediato | Pode ser assíncrono, com garantias de entrega |
Persistência necessária | Não obrigatória | Sim (para confiabilidade e resiliência) |
Manipulador de Eventos de Integração
Um Integration Event Handler é uma classe que consome um Evento de Integração vindo de outro serviço/sistema e realiza alguma ação dentro do seu contexto. Geralmente, esses handlers recebem eventos via mensageria (RabbitMQ, Kafka, Azure Service Bus, etc.) ou APIs assíncronas.
Características principais:
- Age sobre um evento que veio de fora do serviço atual.
- Normalmente é parte de uma Consumer Application (ex: worker service).