Criando objetos com @Builder e @Value do framework Lombok

Hoje iremos ver como utilizar as anotações @Builder e @Value do framework Lombok, visando melhorar a forma de criação de objetos.

Utilizando a anotação @Builder


O nome vem do Pattern Builder, que é um pattern que visa a criação de objetos, ou seja é um pattern de Criação.

Vamos analisar a classe abaixo:

1
2
3
4
5
6
7
@Getter
@Builder
public class Cliente {
     private String nome;
     private String cnpj;
     private String endereco;
}

O arquivo compilado irá ter a seguinte estrutura:

Resultado da compilação utilizando @Builder.

No exemplo acima, notamos que o Lombok criou uma classe interna chamada ClienteBuilder, seguindo os preceitos do pattern, agora podemos criar um objeto Cliente utilizando uma forma fluente, assim deixando o código mais simples e funcional, como abaixo:

1
2
3
4
5
Cliente.builder()
       .nome("Nome do Cliente")
       .cnpj("1234567890")
       .endereco("São Paulo")
       .build();

Quando trabalhamos com a criação de modelos de domínio complexos, onde cada entidade possui vários relacionamentos e atributos o uso dessa abordagem ajuda muito.


Utilizando a anotação @Value


Um outro recurso interessante do Lombok é a anotação @Value, com ela podemos criar objetos imutáveis, este tipo de objeto, são aqueles que após criados, não podem ter seu conteúdo alterado, os principais exemplos que temos desse tipo de objeto são as classes String, Integer, Calendar, etc.

Na plataforma Java, para criarmos objetos imutáveis temos que utilizar a palavra reservada final, evitar o uso de setters, e toda lógica de criação deve ser realizada no momento da construção do objeto.

1
2
3
4
5
6
7
@Value
@Builder
public class Cliente {
    private String nome;
    private String cnpj;
    private String endereco;
}

Perceba que adicionamos a anotação @Value e removemos a @Getter, pois o seu comportamento é justamente marcar a classe e seus atributos como final, criar todos os getters necessários e criar os métodos equals(), hascode() e toString().

Resultado a compilação da classe usando @Value e @Builder.
O uso dessa classe fica da mesma forma do exemplo com @Builder, mas agora temos certeza de estarmos trabalhando com um objeto imutável, em conjunto de uma forma fluente de criação de objetos.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class CriacaoCliente {

 public static void main(String[] args){
 
      Cliente cliente = Cliente.builder()                                          
                                      .nome("Titulo Cliente")
                               .cnpj("1234567890")
                               .endereco("Endereço Cliente")
                               .build();
  
       System.out.println(cliente);
 }
}

Utilizando essas boas práticas conseguimos ter um código Java limpo e de simples evolução.

Até a próxima.

Referências



Comentários

Popular Posts

Criando arquivos de log com Log4J

Monitorando o Tomcat com Java VisualVM

Injeção de dependências em Java EE usando @Inject, @EJB e @Resource ?

Gerenciamento de Transações com EJB - Parte 2

AngularJS - Formatando Datas com o Filter Date

JBoss AS 7 - Instalação e Configuração

Configurando o arquivo application.properties do SpringBoot

Métodos Utilitários da Classe String

Criando Módulos e DataSources no Wildfly

Criando uma Aplicação com Spring Boot e MongoDB