Neste artigo eu apresento o Mapster, e mostro como ele pode ser utilizado para deixar seu desenvolvimento de software mais produtivo através de simplificação de tarefas repetidas.
Se quiser checar o artigo sobre mapeamento de objetos com o AutoMapper, basta clicar aqui.
Nosso cenário: mapeamento de objetos
Antes de falar sobre o Mapster, é importante entender o problema que ele resolve!
Uma tarefa muito comum no dia a dia de um desenvolvedor é o mapeamento de objetos. Mas o que isso significa exatamente?
Como exemplo, vou focar aqui no fluxo de uma aplicação que utiliza a Arquitetura Limpa. Como resultado, aplicações que utilizam esta arquitetura tem uma separação clara entre as responsabilidades de aplicação, infraestrutura, domínio e API/UI, resultando em camadas delas separadas. Modelos de entrada e saída são separados dos modelos de domínio, resultando em modelos com diversas propriedades em comum, com o modelo de domínio sendo mais “rico”, ao invés de um modelo anêmico.
Em nosso cenário, teremos um objeto do modelo de entrada AddCustomerInputModel, o qual queremos mapear para um objeto da entidade Customer. Também vamos mapear um objeto Customer para CustomerViewModel.
Nosso Controller CustomersController está logo abaixo.
E abaixo estão nossos modelos de saída, entrada, e domínio.
Abaixo você pode encontrar a classe AddCustomerInputModel.
Adicionei algo extra aqui: quero mapear um Customer, que tem FirstName e LastName para o CustomerViewModel que tem FullName.
Bom, o mais simples aqui é simplesmente chamar os construtores (com ou sem parâmetros) onde sejam necessários. Porém, dependendo da quantidade de parâmetros, pode se tornar uma tarefa repetitiva e que resulta em código pouco legível.
Não teríamos outra alternativa?
Utilizando o Mapster
Mapster é uma biblioteca de mapeamento de objetos, e tem uma performance excelente.
Para instalar, basta instalar o pacote Mapster via gerenciador de pacotes NuGet, ou executar o comando abaixo.
dotnet add package Mapster
Após isso, vamos definir os mapeamentos entre o modelo de entrada e entidade, e entre entidade e modelo de saída.
Para isso, vou criar um arquivo MappingConfigurations.cs, que vai conter o mapeamento adicional, extendendo o IServiceCollection mas não o utilizando realmente.
Começamos cada mapeamento explícito com TypeAdapterConfig<T, U>, onde T é o tipo de origem, e U o tipo de destino.
Note que podemos realizar o mapeamento por membro do objeto com método .Map(), como no caso em que realizamos a concatenação entre FirstName e LastName, ou utilizando o construtor. É necessário prestar atenção no uso de construtores, já que o Mapster necessita ter um “guia” para usá-los através do ConstructUsing.
E, finalmente, realizamos a chamada desde a classe Program.cs.
Para começar a utilizar os mapeamentos é bem simples, e para ser honesto, bem fluído. Basta utilizar o método de extensão .Adapt<T> que o Mapster oferece aos nossos objetos, permitindo mapear de maneira bem limpa, como mostrado abaixo. Note que em situações onde nenhum mapeamento mais “especial” seja necessário, bastaria chamar o método .Adapt<T> diretamente sem necessidade de criar os mapeamentos explicitamente.
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o Método .NET Direto ao Ponto, minha plataforma com mais de 800 videoaulas, com cursos cobrindo temas relacionados a linguagem C# e Programação Orientada a Objetos, APIs REST com ASP NET Core, Microsserviços com ASP NET Core, HTML, CSS e JavaScript, Desenvolvimento Front-end com Angular, Desenvolvimento Front-end com React, JavaScript Intermediário, TypeScript, Formação Arquitetura de Software, Microsoft Azure, Agile, SQL, e muito mais.
Inclui comunidade de centenas de alunos, suporte por ela, plataforma e e-mail, atualizações regulares e muito mais.
Clique aqui para ter mais informações e garantir sua vaga
Conclusão
Neste artigo vimos como realizar mapeamentos de objetos utilizando a biblioteca Mapster, que é uma excelente alternativa com boa performance O que achou?
Se gostou, compartilhe o blog com sua equipe e colegas de profissão!
Você é um Desenvolvedor .NET Pleno, Sênior ou Líder/Arquiteto e tem interesse em alcançar o próximo nível como Desenvolvedor .NET, se tornando uma referência técnica? Se inscreva na lista de espera da Imersão .NET Expert. São 12 horas de conteúdo cobrindo temas como Arquitetura de Microsserviços, Domain-Driven Design, Arquitetura Hexagonal, MongoDB, Arquitetura Orientada a Eventos com RabbitMQ, API Gateway com Kong, Autenticação com JWT e Keycloak, Azure DevOps, Pipelines, e Docker Registry, Observabilidade com Elasticsearch, Kibana e Elastic APM.
Também receberá acesso a bônus incríveis exclusivos. Se inscreva na lista de espera e entraremos em contato!