Vai um MediatR ai?
Na maioria das vezes que vejo projetos utilizando Microsserviços em .NET os arquitetos gostam de usar CQRS com o Mediator. Virou quase um default para utilização desse padrão. E para utilizar o padrão Mediator faz o uso do famigerado pacote MediatR.
Na minha humilde opinião, está ai uma mistura complexa e atualmente mal utilizada (Não me mate). Mas fica para um próximo artigo.
O que é o pacote MediatR?
O MediatR é um componente criado por JBogard o mesmo cidadão que criou o AutoMapper. Calma, não julgue ainda… o AutoMapper funciona! Tudo depende do contexto. 😀
Voltando….
O MediatR implementa um padrão muito top chamado Mediator. Não faz parte desse artigo explicar o que é, mas diz o seguinte.
O Mediator é um padrão de projeto comportamental que permite que você reduza as dependências caóticas entre objetos. O padrão restringe comunicações diretas entre objetos e os força a colaborar apenas através do objeto mediador.
Por que você gosta?
Para mim, a implementação do padrão Mediator é perfeita, fazendo com que o acoplamento do código seja mínimo. Com pouca configuração ja se consegue algo muito interessante. Segue o repositório oficial – https://github.com/jbogard/MediatR.
Gosto do uso fazendo com que o Handler seja minha camada de serviços de aplicação ou casos de uso do projeto, fazendo com que para cada mudança de estado “Commands” seja separado por objetos diferentes. Cada ação com seu Handler com as regras de orquestração.
Assim para cada contexto de atualização do estado de um domínio eu tenho um Command, um Handler e um Response diferente.
Uma outra situação interessante é quando podemos ter eventos após qualquer mudança no sistema. Nesse mesmo projeto ao criar um Pedido deve – se lançar uma notificações a algumas pessoas. Nesse caso, somente enviamos um Evento e o MediatR faz o papel de entregar ao handler ou handlers de evento correto. Funciona muito bem para disparar eventos a outros Microsserviços ou Contextos.
O uso correto faz com que se tenha um ganho de desacoplamento muito interessante.
Somente fazendo um parentese, eu não gosto do uso para Queries no caso do CQRS, uso direto mesmo com uma ServiceQuery ou QueryRepository. Simplifica a vida.
Por que virou zona?
Assim como o uso de Microsserviços em toda solução existente o MediatR não ficou de fora. Virou modinha.
Vejo algumas implementações um tanto estranhas com MediatR.
- Uso desmedido do pacote sem necessidade, por exemplo projetos muito pequenos com simples CRUD;
- Utilização do MediatR como uma camada de repetição do repositório, no meu ponto de vista com uma camada a mais sem sentido.
- Mult eventos desconexos.
Ao lançar um evento segue disparando para outros eventos totalmente aleatórios, deixando o código extremamente complexo e difícil até mesmo de debugar e avaliar.
Conclusão
Eu particularmente, gosto do pacote MediatR pela facilidade que ele implementa o padrão Mediator, mas vejo muitos projetos usando como bala de prata e para tudo o pacote é aplicado. Mesmo em projetos pequenos, no qual não concordo muito com o uso, mas se bem empregado deixa o código mais legível.
Segue o GitHub de um projeto que criei no qual exemplifica a forma como eu uso. Fique a vontade para discordar e dar sugestões. Falei bobagem? Manda ai bora ajustar conhecimentos.
Lembre – se! Software de qualidade é aquele que deixa seu cliente satisfeito.
Referências
https://github.com/danilodumba/locamoto
https://github.com/jbogard/MediatR
https://refactoring.guru/pt-br/design-patterns/mediator
https://macoratti.net/21/11/c_mediator1.htm#:~:text=Segundo%20a%20definição%20da%20Gang,sua%20interação%20de%20forma%20independente.
Deixe uma resposta
Want to join the discussion?Feel free to contribute!