Facade Pattern

Il design pattern facade (letteralmente “facciata”) significa “facciata”, definisce un oggetto che permette, attraverso un’interfaccia più semplice(che agisce appunto da “facciata), l’accesso a sottosistemi che espongono interfacce complesse

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';
    }
}

 

Precedente PfSense: Analisi Report per Squidguard Successivo Angular: i Services