Estamos tão acostumados com o padrão Javabean: gets, sets e propriedades privadas, que é comum não refletirmos sobre algumas decisões que tomamos ao definir as interfaces de nossas classes.

Uma técnica relativamente comum é o Method Chaining. Trocando em miúdos, bem miúdos, consiste em fazer os seus métodos set retornarem 'this'. Algumas classes da API Java funcionam assim, veja a documentação de StringBuffer, por exemplo.

E o que eu ganho com isso?

Concisão, legibilidade, clareza, praticidade…

Um código que poderia ser assim:

stringBuffer.mark();
stringBuffer.position(8);
stringBuffer.reset();

fica assim:

stringBuffeer.mark().position(8).reset();

Bem melhor não?

Como fazer?

Simples, substitua isso:

public void setName(String name){
   this.name = name;
}
public void setEmail(String email){
   this.email = email;
}

por isso:

public User name(String name){
   this.name = name;
   return this;
}
public User email(String email){
   this.email = email;
   return this;
}

E use assim:

User u = new User().name("Fulaninho").email("fulaninho@gmail.com");

E seja feliz.

 

2 Responses to Method Chaining

  1. Carlos Alberto disse:

    Este recurso também é usado para fazer dsl interna, mas há de se ter cuidado pois diversas especificações se apoiam nas especificação dos javabeans ex. JSF, JSP,JPA, isso pode causar um certo desconforto no uso destes frameworks.

  2. PH disse:

    Cadê aquela introdução falando do seu amigo e talz?

    Fica feio pra caramba, mas é viável a criação do padrão Javabean junto com o encadeamento dos métodos para atender as exigências desses frameworks.

    Ou limitar o encadeamento de métodos à camada de negócio / modelo.

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

* Copy this password:

* Type or paste password here:

4 Spam Comments Blocked so far by Spam Free Wordpress

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.