Pular para o conteúdo principal

Messaging Mapper

Descrição​

Messaging Mapper é um componente separado que converte entre objetos de domínio e mensagens. Ao enviar, lê os objetos e monta a mensagem para o canal; ao receber, cria ou atualiza objetos de domínio a partir do conteúdo da mensagem.

Nem os objetos de domínio nem a infraestrutura de mensageria conhecem o mapper, e por isso os dois lados evoluem de forma independente. É a especialização para mensageria do padrão Mapper de Fowler, análoga ao Data Mapper no mapeamento objeto-relacional.

O desafio é que objetos usam referências e herança, recursos que muitas infraestruturas de mensageria não suportam, e que a mensagem deve ser legível por aplicações que nem são orientadas a objetos.

Problemas que resolve​

  • Acoplamento entre o modelo de domínio e o formato das mensagens.
  • Dificuldade de representar grafos de objetos e herança em mensagens.
  • Duplicação de código de conversão espalhado pela aplicação.

Quando usar​

  • Quando o modelo de domínio é rico e precisa ser trocado por mensagens sem se acoplar a elas.
  • Quando o formato da mensagem é definido por terceiros ou por um modelo canônico.

Quando evitar​

  • Quando as mensagens são simples e o próprio objeto de dados já é a mensagem.
  • Quando um serializador genérico do framework resolve sem lógica de mapeamento específica.

Trade-offs​

GanhoCusto / Risco
Domínio e mensageria independentesCódigo de mapeamento a manter em cada mudança de modelo
Mudanças de formato ficam localizadasMapeamento de grafos e herança é complexo
Reuso do mesmo mapper em vários endpointsPossível perda de informação na conversão
  • Convém versionar o formato da mensagem e testar o mapper com mensagens antigas e novas.

Diagrama​

O mapper fica entre o domínio e o endpoint, convertendo nos dois sentidos.

Padrões relacionados​

Referência​