GlosarioArquitectura

¿Qué es Facade?

Las Facades en Laravel proporcionan una interfaz estatica y expresiva para acceder a servicios del contenedor de dependencias, como Cache::get(), Route::get() o DB::table(), sin necesidad de inyectar dependencias manualmente.

Facades

Las Facades proporcionan una sintaxis estatica conveniente para acceder a clases disponibles en el service container de Laravel. Aunque parecen llamadas a metodos estaticos, en realidad resuelven la instancia desde el contenedor y llaman al metodo correspondiente.

Ejemplos de uso

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

// Todas estas son llamadas a instancias reales del contenedor
Cache::put('key', 'value', 3600);
$users = DB::table('users')->where('active', true)->get();
Log::info('Usuario logueado', ['user_id' => $user->id]);

Como funcionan internamente

class Cache extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return 'cache'; // Resuelve app('cache') del contenedor
    }
}

Facades vs Inyeccion de dependencias

Aunque las facades son comodas, en muchos contextos es preferible usar inyeccion de dependencias para mejorar la testabilidad del codigo. Sin embargo, Laravel proporciona metodos de testing para mockear facades facilmente.

// En tests, puedes mockear cualquier facade
Cache::shouldReceive('get')
    ->once()
    ->with('key')
    ->andReturn('value');

Las Facades de tiempo real (real-time facades) permiten tratar cualquier clase como una facade anteponiendo Facades\ al namespace.