GeDA – Generic DTO Assembler

Tirando um pouco a poeira e as teias de aranha do blog, apresento-lhes o GeDA. Essa é uma biblioteca utilitária para copiar valores entre Java Beans. Sua aplicação prática é popular DTO’s a partir de Entidades JPA e vice-versa. Antes de conhecer essa biblioteca eu copiava manualmente os dados ou utilizava o BeanUtils com os métodos copyProperties.

A vantagem do GeDA é a facilidade na configuração. Basta adicionar o JAR no seu projeto e montar os DTO’s a partir das entidades. Depois disso, basta adicionar as anotações no DTO e depois criar uma classe para realizar o Assembly entre a Entidade e o DTO. Calma, vou explicar mais detalhadamente logo abaixo.

Configuração

O primeiro passo é fazer o download da biblioteca no site oficial ou diretamente do source forge. Por fim, basta adicionar o jar ao build path do projeto.

Criando um DTO

Apenas para exemplificar, vou criar uma Entidade Usuario:

@Entity
@Table(name="usuario")
public class Usuario {
 
 @Id
 private Long id;
 private String nome;
 private String login;
 private String senha;
 // Get's e Set's
}

E agora vou mapear esta entidade em um DTO usando as anotações do GeDA:

@Dto
public class UsuarioTO {
 
    @DtoField("id")
    private Long idUsuario;
 
    @DtoField
    private String nome;
 
    @DtoField
    private String login;
 
    @DtoField
    private String senha;
    // Get's e Set's
}

Importante destacar aqui, o uso da anotação @DtoField. No Id, eu precisei definir o nome original do campo, pois modifiquei-o no meu DTO. Como os outros campos possuem o mesmo nome, não há necessidade de informar o nome do campo na entidade.

Copiando as informações

Agora vamos criar a classe que realizará o assembly:

public class UsuarioService {
    public UsuarioDTO getUsuario(final Long idUsuario) {
        final Usuario usuario = getFromDb(idUsuario);
        final UsuarioDTO dto = novoTO();
        final DTOAssembler assembler = DTOAssembler.newAssembler(UsuarioDTO.class, Usuario.class);
        assembler.assembleDto(dto, usuario, null);
        return dto;
    }
 
    public UsuarioDTO novoTO() {
        return new UsuarioDTO();
    }
 
    public Usuario getFromDb(final Long idUsuario) {
        // aqui teria um código para buscar um usuário do banco
    }
}

É um exemplo simples e rápido, mas o suficiente para mostrar como é simples realizar o assembly entre uma entidade e um DTO. É possível fazer as duas conversões, no método do Service, bastaria mudar a chamada do método assembleDto para assembleEntity.

Concluindo

Existem outras coisas possíveis, como copiar objetos, listas, etc. Para isso, sugiro uma visita ao faq no site oficial, onde é possível visualizar alguns exemplos de conversões. Apesar da documentação ser bastante fraca, é possível se basear nos exemplos para suprir praticamente todas as necessidades.

Uma última dica, para quem deseja utilizar o GeDA em aplicações reais, sugiro a criação de um Assembler genérico, o que facilitará bastante o processo de copia dos valores.

Java
Tags: , , ,

Deixe um comentário