La facade è molto simile ai design pattern adapter e decorator. L’adapter agisce come un ponte tra due interfacce non compatibili fra loro, mentre il decorator viene usato per cambiare dinamicamente il comportamento degli oggetti decorandoli per aggiungerne funzionalità avanzate o mancanti
Consideriamo questa situazione in cui da una classe Client per realizzare una operazione dobbiamo accedere a diverse classi:
L’idea è quella di tramite una facciata nascondere la complessità dell’operazione e chiamare solo la Facade.
FACADE PATTERN IN LARAVEL
In particolare gli oggetti facade di laravel permettono di accedere, da qualsiasi punto dell’applicazione, a quasi tutti gli oggetti disponibili nel container applicativo dei componenti(ServiceContainer.)
Facciamo un esempio con Request.
/* Non è necessario specificare il namespace delle classi facade in quanto in Laravel si possono definire degli alias per rimappare i percorsi completi in nomi più facili da ricordare in questo file: config/app.php */ use Request; // The method method will return the HTTP verb for the request.(es. GET, POST) $method = Request::method();
mappata tramite Illuminate\Support\Facades\Request. che è la stessa cosa di scrivere
$request = App::make('request'); $method = $request-method();
Tutti gli oggetti facade si trovano in vendor/Laravel/framework/src/Illuminate/Support/Facades
<?php namespace Illuminate\Support\Facades; /** * @see \Illuminate\Http\Request */ class Request extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'request'; } }