Interface Fluente e StepBuilders

Eder Leite
SynchroTEC
Published in
2 min readJan 5, 2016

Interface Fluente

Por que criar interfaces fluentes (Fluent Interfaces)?

Simples, lembra do Builder? Este padrão de projeto nos ajuda a escrever códigos menos complexos e intuitivos, minimizando os erros durante o desenvolvimento.

A interface fluente é muito parecida com o builder, é muito usada na criação de API e utilitários, fazendo com que o desenvolvedor seja guiado, auto explicando seu uso a cada passo.

Mas por onde começar? Suponha que tem a classe Nf possua alguns atributo e uma lista de ItemNf:

Para instanciarmos essa classe fazemos assim:

Essa classe por ser pequena, não trás grande complexidade, olhando a forma de uso, mesmo verboso criar uma instancia de Nf é simples.
Refatoremos agora a classe Nf usado o padrão Interface fluente:

Pouca coisa foi mudado certo? Vejamos o uso:

O que acharam? Mais intuitivo? Essa é a grande vantagem a Interface Fluente, a forma de uso ficou bem mais clara, a própria classe explica, guia o desenvolvedor no seu uso.
Mas ainda existe um problema aqui, se usarmos os métodos na ordem errada nossa interface ficará não fluente. Exemplo:

Esquisito né? A leitura já não está fluente, além disso, nada impede de esquecer o preenchimento do cliente:

Para quem esses itens foram vendidos? Isso pode causar erro, caso o cliente seja obrigatório em uma NF.

StepBuilders

Para resolver esse problema, existe um outro padrão de projeto bem interessante, chamado StepBuilders.

Ele tem o objetivo de resolver problemas do builder tradicional e da interface fluente, tais como:

  • Não guiar o usuário corretamente para criação de um objeto;
  • O usuário pode finalizar a construção do objeto a qualquer momento, chamando o método que finaliza a execução, mesmo sem todas as informações necessárias. Deixando o objeto em um estado incoerente

O StepBuilder funciona simplesmente encadeando interfaces, cada uma representando um passo na criação de um objeto ou execução de uma ação.

Usando o mesmo exemplo da Nf, vejamos agora com fica nossa interface fluente implementando também o padrão StepBuilder:

O uso é bem parecido com a anterior, a diferença é que a IDE vai te ajudar e não errar.

Caso você tente trocar a ordem dos métodos, o Java lançará um erro de compilação, algo parecido com isso:

Error:(34, 25) java: D:\workspace\untitled\src\Nf.java:34: cannot find symbol
symbol : method paraCliente(java.lang.String)
location: interface Nf.NumeroStep

Eu gosto muito de escrever interfaces fluentes, principalmente na criação de utilitários. Assim que der falo sobre alguns utilitários que criei.

Se gostou deixe-me um comentário.

Abraços.

Fontes:

Originally published at edermfl.wordpress.com on January 5, 2016.

--

--