Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5

Cosa Sono Le Facades di Laravel 5.0?

Difficulty:AdvancedLength:ShortLanguages:

Italian (Italiano) translation by Luca Menozzi (you can also view the original English article)

I design pattern, nel software, sono definiti alla perfezione nelle parole di Martin Fowler:

I pattern forniscono un meccanismo per rappresentare consigli di progettazione in un formato di riferimento. Il design del software è un argomento enorme e, quando ci si trova di fronte ad un problema di design, bisogna essere in grado di concentrarsi su ciò che è più vicino possibile al problema.

Il codice che utilizza i design pattern è facile da capire, da mantenere e da estendere. Lo scopo di questo tutorial è di promuovere la facade in Laravel.

Cos'è il Facade Pattern?

Secondo la definizione della Gang of Four, il design pattern facade è un pattern strutturale che definisce un'interfaccia semplificata di un sottosistema più complesso. Il pattern è basato sulla creazione di una semplice interfaccia che agisce da facciata per la collezione delle logiche e dei metodi richiesti. La facade stessa mantiene le dipendenze.

La facade è molto simile ai pattern adapter e decorator. L'adapter agisce come un ponte tra due interfacce non compatibili fra loro, mentre il decorator è più complesso e viene usato per cambiare dinamicamente il comportamento degli oggetti.

Cosa Sono le Facade in Laravel?

La deliziosa sintassi che usa Laravel rende la scrittura del codice più pulita e più semplice da comprendere. Le facade di Laravel sono lo zucchero sintattico per il service location.

Diamo un'occhiata alla Facade di Laravel e a come funziona. La facade Cache, in Laravel, assomiglia a questo:

Anche se può sembrare che stia usando un caricamento di metodi statici, Laravel fornisce, in realtà, un'interfaccia alle classi disponibile nel service container dell'applicazione. Come probabilmente già sai, il codice sottostante è equivalente a:

Gli oggetti delle facade di Laravel si trovano in vendor/Laravel/framework/src/Illuminate/Support/Facades, mentre la facade Cache è in Cache.php:

Quando usiamo cache::get('key'), stiamo, in realtà, chiamando la classe sottostante. Assicurati di creare l'alias della classe sopra menzionata nel file di configurazione config/app.php:

Gli alias sono caricati automaticamente dall'auto-loader di Laravel. Impostare il nome della classe a cache crea coerenza con la facade. Questa opzione metterà quasi sicuramente a proprio agio col tuo codice le persone che usano le facade.

I seguenti tre metodi sono cruciali per generare una Facade:

  • il magic method di PHP __callStatic(), definito nel metodo getFacadeAccessor nella classe figlia;
  • la Facade Root, che rappresenta la classe sottostante da cui la Facade richiama i metodi;
  • il metodo resolveFacadeInstance, responsabile di risolvere l'istanza corretta del service.

L'implementazione dei metodi della classe facade:

__callStatic, sostanzialmente, chiama l'IoC Container per unirlo alla classe. Chiama inoltre i suoi (non statici) metodi usando i case dello switch tramite la funzione PHP call_user_func_array(), passando l'array dei parametri all'oggetto ritornato dal metodo getFacadeRoot(). Il metodo getFacadeRoot() è fatto così:

Ed ecco il resolveFacadeInstance():

Come illustrato nell'ultima riga del codice, nel metodo resolveFacadeInstance, Laravel ritorna l'istanza del service locator. Poiché il locator è una mera istanza della classe originale, possiamo concludere che la facade di Laravel non corrisponde con la definizione del pattern della GoF. Queste sono soltanto service location. Diversamente dalla facade di Laravel, la Facade vera e propria rende la scrittura dei test unitari difficile e, a volte, anche impossibile, a causa della creazione di dipendenze a codifica fissa (hard-coded).

A coloro che pensano che la Dependency Injection tramite il costruttore sia un'opzione migliore rispetto all'uso della facade di Laravel, vorrei metterli al corrente che potrebbe essere necessaria qualche configurazione extra.

Come Creare una Facade in Laravel

Voglio creare un file di controllo Facade in Laravel che verifichi se un file in input è un pdf oppure no. Per fare questo, prima di tutto, dobbiamo creare una classe Is Pdf in App/MyFacade/IsPdf.php:

In seconda battuta, facciamo il bind della classe col service provider. Scrivi, quindi, il codice del nuovo service provider in App\Providers\IsPdfServiceProvider:

Terzo, crea la classe facade come estensione della classe precedentemente menzionata Illuminate\Support\Facades\Facade. Crea quindi la classe in App\Facades\IsPdfFacade.php.

L'ultimo step è quello di registrare la Facade in config/app.php:

e l'alias:

Congratulazioni! Hai creato con successo una facade Laravel. Sentiti libero di testare la Facade usando:

Conclusioni

Ora sappiamo che la facade di Laravel rende estremamente semplice richiamare metodi e la dependency injection può davvero ripagare nel lungo periodo. Naturalmente la Facade di Laravel ha i suoi vantaggi e i suoi svantaggi. Sta allo sviluppatore scegliere la giusta opzione.

Per risorse aggiuntive relative a Laravel, dai un'occhiata all'offerta del marketplace.

Chi può saperlo, magari questo articolo ti incoraggerà a sviluppare codice framework-agnostico e a dimenticarti delle facade! Buona fortuna!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.