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).
処理されていないエラーが発生しました。 再読み込み 🗙