Programmare in Php attraverso le interfacce fluent

Leggo con un certo interesse del nuovo meme di planet-php, cioè dell'uso di interfacce fluent.

A seguire un piccolo tutorial su come utilizzarle.

In cosa consistono le interfaccie fluent? Detto in maniera semplice si tratta del principio di method chaining di linguaggi come SmallTalk che comporta l'esecuzione metodi in cascata senza dichiarare ogni volta l'oggetto, in modo da poter leggerne il codice fluentemente come se fosse una frase.

Cioè invece che scrivere:

PLAIN TEXT

PHP:

	$pippo = new Oggetto();
$pippo->faccioQuesto();
$pippo->poiQuello();
$pippo->eQuellaltro();

usando un'interfaccia fluent riscrivo così:

 

PLAIN TEXT

 

 

			$pippo= new Oggetto();
$pippo->faccioQuesto()->poiQuello()->eQuellaltro();
 

che può essere poi reso più leggibile grazie alla gestione degli spazi e degli a capo di php ed usando un'opportuna tabulazione

 

PLAIN TEXT

PHP:
 

 

			$pippo= new Oggetto();
$pippo->faccioQuesto()
            ->poiQuello()
            ->eQuellaltro();
 

ma come funziona un codice del genere? semplicemente restituendo all'interno dei metodi sempre l'oggetto iniziale

 

PLAIN TEXT

PHP:
 

 

			class Oggetto()
{
            var $variabile = '';

            function public faccioQuesto()
            {
                        echo 'ciao';
                        return $this;
            }

            function public poiQuello()
            {
                       $this->poiQuelloPrivato();
                       return $this;
            }

            function public eQuellaltro()
            {
                        echo $this->variabile;
                        return $this;
            }


            function private poiQuelloPrivato()
            {
                        $this->variabile = 'mondo';
            }           
}
 

anche se più comodo da leggere e da usare questo metodo di programmazione ha alcuni limitazioni:

  • innanzitutto per alcune procedure complesse bisognerà sempre conoscere a priori la sequenza di comandi da eseguire (anche se spesso è così anche nella normale programmazione ad oggetti), e bisognerà conoscere tutti i parametri da passare a questi ultimi
  • il codice qui sopra esposto funziona solo con php 5 che permette di restituire l'oggetto iniziale direttamente dai metodi
  • scordatevi una Naming Convention decente dei metodi, o si usano dei termini "fluidi" e facili da concatenare o il giochetto perde di significato in leggibilità
  • e ultima cosa, come fa notare Andi Gutsman, l'utilizzo di una fluent interface comporta l'uso metodico delle exception (non sempre usate dagli sviluppatori procedurali).

Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Condividi le tue opinioni su questo articolo!