Pressione enter para ver os resultados ou esc para cancelar.

Você conhece o AutoMapper?

Sabe aquela sensação de “deve ter um jeito melhor de fazer isso” que todo programador tem? Boa parte das vezes isso acontece quando estamos repetindo código demais. Você olha pro código que está fazendo, tem certeza de que existe uma maneira melhor de fazer essa tarefa, mas você não sabe qual é essa maneira. Eu imagino que o Jimmy Bogard estava fazendo uma tarefa assim quando teve a ideia de criar o excelente AutoMapper. Ele solucionou um problema que quase toda aplicação multi-camadas tem: mapear propriedades de um objeto pro outro. Eu me refiro a códigos assim:

public PessoaDTO DeveTerUmJeitoMelhor(Pessoa pessoa)
{
    var dto = new PessoaDTO();
    dto.Nome = pessoa.Nome;
    dto.Sobrenome = pessoa.Sobrenome;
    dto.Idade = pessoa.Idade;
    dto.Sexo = pessoa.Sexo;
    dto.CPF = pessoa.CPF;
    dto.Telefone1 = pessoa.Telefone1
    dto.Telefone2 = pessoa.Telefone2
    // ...mais 15 linhas de propriedades sendo mapeadas
    dto.Endereco = pessoa.Endereco;

    return dto;
}

Você precisa mesmo escrever tudo isso? Lógico que não, você vive na incrível era da tecnologia, em que outras pessoas solucionam seus problemas pra você. Com o AutoMapper você troca todas as linhas repetitivas acima por isso:

public PessoaDTO AgoraSim(Pessoa pessoa)
{
    Mapper.CreateMap<Pessoa, PessoaDTO>(); // Prepara a conversão de Pessoa para PessoaDTO
    PessoaDTO dto = Mapper.Map<PessoaDTO>(pessoa); // Mapeia pessoa para o tipo PessoaDTO
    
    return dto;
}

Parece mágica, mas é só C#.

AutoMapper

O AutoMapper é um mapeador objeto-para-objeto baseado em convenção, isso significa que ele simplesmente funciona para casos esperados, você só precisa configurar os casos que fogem à regra. Suas convenções já atendem à boa parte dos casos, mas ele permite customizações de acordo com sua necessidade.

Como bônus, o AutoMapper ainda é open source e PCL.

Por que utilizar?

Além de te poupar todo aquele tempo mapeando propriedades, utilizar um mapeador pode diminuir seus erros quando você muda propriedades de camadas separadas. No cenário em que você não está usando AutoMapper, se você adicionar uma propriedade mas esquecer de fazer o mapeamento correto, o DTO final não terá o valor correto preenchido. E de quem será a culpa? De você que esqueceu de fazer o mapeamento, é claro. O AutoMapper te ajuda nesses momentos, já que ele percebe a propriedade nova e faz o mapeamento sem que você precise mudar nenhuma linha a mais.

Hora do Exemplo!

Veja no exemplo abaixo algumas das coisas que ele já faz por convenção:

public class Pessoa
{
    public string Nome { get; set; }
    public string Idade { get; set; }
    public Endereco Endereco { get; set; }
}

public class Endereco
{
    public string Rua { get; set; }
}
public class PessoaDTO
{
    public string Nome { get; set; }
    public int Idade { get; set; }
    public string EnderecoRua { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        var pessoa = new Pessoa();
        pessoa.Nome = "Robert";
        pessoa.Idade = "21";
        pessoa.Endereco = new Endereco()
        {
            Rua = "Rua 1"
        };

        PessoaDTO dto = CriaDTO(pessoa);

        Console.WriteLine("Pessoa: " + dto.Nome + ", " + dto.Idade + " anos, reside no endereço: " + dto.EnderecoRua);
        // Pessoa: Robert, 21 anos, reside no endereço: Rua 1
        Console.ReadLine();
    }

    private static PessoaDTO CriaDTO(Pessoa pessoa)
    {
        Mapper.CreateMap<Pessoa, PessoaDTO>();
        return Mapper.Map<PessoaDTO>(pessoa);
    }
}

Todos os mapeamentos foram feitos automagicamente pelo AutoMapper. String para int, Endereco.Rua para EnderecoRua (ele chama isso de Flattening). Além disso, ele é totalmente configurável. Quer fazer um tratamento especial para um tipo? É só definir. Valor padrão para campos nulos? Ele tem também. Enfim, a lista é longa e ele faz muito mais do que mapear propriedades de nomes iguais. Como esse não é o foco do artigo, se quiser ver todas funções possíveis é só acessar o wiki no GitHub.

Para ver um exemplo mais aplicado, o Eduardo Pires escreveu um post com o AutoMapper sendo usado em um projeto MVC para mapear ViewModels.

Se você já está pensando no tempo que vai sobrar para ver vídeos de gatos na internet por usar o AutoMapper, basta acessar a página de Getting Started e seguir um guia ridiculamente simples de como começar a usá-lo.

Este post faz parte de uma série de posts que visam apresentar ferramentas e bibliotecas para facilitar a vida do profissional de TI

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someone
Comentários

3 Comentários

Felipe

Ótimo post!! Muito simples a forma de explicar!! Vlw!!

Anônimo

Muito Bom

Samuel

Ótimo post, fácil entendimento.

Me ajudou muito.


Deixar um comentário