💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Facade
Facade (Fachada) es un patrón de diseño estructural que proporciona una interfaz simplificada a una biblioteca, un framework o cualquier otro conjunto complejo de clases.
Propósito y Caso de Uso
Utiliza Facade cuando el código cliente necesite trabajar con un subsistema que requiere varios pasos de inicialización, configuración y coordinación entre múltiples clases (ej. subir un archivo: validar, comprimir, convertir a WebP y subir a almacenamiento). La fachada oculta esa complejidad tras un único método, sin eliminar el acceso directo al subsistema si algún cliente avanzado lo necesita.
Estructura del Patrón
- Fachada: Expone métodos simples que internamente orquestan el subsistema.
- Subsistema: Conjunto de clases con lógica compleja e interdependiente que el cliente no necesita conocer directamente.
- Cliente: Interactúa solo con la fachada en el caso común.
Flujo de Funcionamiento
- Punto de entrada único: El cliente llama a un solo método de la fachada (
upload(file)). - Orquestación interna: La fachada invoca en orden a los distintos componentes del subsistema.
- Resultado simplificado: El cliente recibe un resultado final, sin conocer los pasos intermedios.
Ejemplos de Implementación Reales
class Validator {
check(file: File): boolean { return file.size < 5_000_000; }
}
class ImageCompressor {
compress(file: File): Blob { return new Blob([file]); /* simulado */ }
}
class StorageUploader {
upload(blob: Blob): string { return `https://cdn.example.com/${Date.now()}.webp`; }
}
// Fachada
class MediaUploadFacade {
private validator = new Validator();
private compressor = new ImageCompressor();
private uploader = new StorageUploader();
upload(file: File): string {
if (!this.validator.check(file)) throw new Error('Archivo demasiado grande');
const compressed = this.compressor.compress(file);
return this.uploader.upload(compressed);
}
}
// El cliente ignora los 3 pasos internos
const url = new MediaUploadFacade().upload(selectedFile);Cuándo NO usarlo
Si el subsistema ya es simple (una o dos clases sin coordinación compleja), envolverlo en una fachada añade una capa redundante (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →).