Esses dias estava conversando com um grande colega programador sobre a carência do comando With no PHP. Estive procurando por algum tempo e como não tive uma solução que me agradasse joguei a idéia para o limbo.
Até que ontem, em mais uma das minhas noites de insônia, tive a idéia de simular o comando With com umas das melhores práticas de legibilidade de código: Fluents Interfaces, ou Interfaces Fluentes.
Primeiro Passo: Falando de Fluents Interfaces e PHP
Acredito que para muitos o termo "Interfaces Fluentes" não é novidade alguma. Mas, para quem não conhece, trata-se de uma maneira mais intuitiva de construir suas classes. Como a implementação de POO no PHP4 era deficiente (leia-se precária) não era possível a prática de Interfaces Fluentes graças à seguinte limitação: no PHP4 você não consegue criar uma referência direta ao objeto através do retorno dos seus próprios métodos.
Mas no PHP5 e sua OO totalmente reescrita, eis que tudo (ou quase) se fez novo. Agora, como a deficiência acima foi suprida, podemos facilmente fazer referencia direta ao objeto retornado por um dos seus próprios métodos.
Exemplo:
// Classe que retorna a própria referencia em todos os métodos
class escreveONomeCompletoUsandoInterfaceFluente {
public function escreveNome( $str ) {
// Escreve um nome qualquer
echo( $str );
// Retorna a referencia do próprio objeto
return $this;
}
public function escreveSobreNome( $str ) {
// Escreve um sobrenome qualquer
echo( $str );
// Retorna referencia ao próprio objeto
return $this;
}
}
Ao ler a classe de exemplo acima, você notará que eu sempre retorno o próprio objeto. Pois bem imaginemos uma possivel utilização NORMAL da classe acima:
$escreveNomeCompleto = new escreveONomeCompletoUsandoInterfaceFluente();
$escreveNomeCompleto->escreveNome( ‘ Pedro ‘ );
$escreveNomeCompleto->escreveSobreNome( ‘ Mendes ‘ );
Porém, como eu estou retornando o próprio objeto nos métodos da classe criada, a implementação Fluente do código seria a seguinte:
$escreveNomeCompleto = new escreveONomeCompletoUsandoInterfaceFluente();
$escreveNomeCompleto->escreveNome( ‘ Pedro ‘ )->escreveSobreNome( ‘ Mendes ‘ );
Desta forma, esta criada uma implementação simples das Fluents Interfaces no PHP. Como você pode perceber, a idéia central é você encadear a chamada dos seus métodos da seguinte forma: $objeto->metodo1()->metodo2()->metodo3()->…->metodofinal(); ao invés de ficar chamando o objeto a cada vez que você queira chamar um método.
Segundo Passo: Aplicando o conceito de Fluents Interfaces para alcançar o conceito de With
Em algumas linguagens você tem o comando With, que funcionada da seguinte forma:
With instanciaDoObjeto
metodoUm();
metodoDois();
metodoTres();
End With;
Com isso, você fornece a instância do objeto e simplesmente trabalha com seus atributos e/ou métodos dentro do bloco criado, diminuindo o código a ser escrito e deixando-o mais limpo. No PHP eu não achei nada que criasse o With diretamente, mas com o conceito de Interfaces Fluentes, o mesmo código acima poderia ficar da seguinte forma:
$instanciaDoObjeto
->metodoUm();
->metodoDois();
->metodoTres();
Pronto! Esta criado o conceito do With com uma estrutura mais aprimorada. Espero que tenham gostado e enviem suas duvidas/criticas/sujestões.
Um abraço,
Pedro Mendes
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário