Buen, ayer de noche tarde estaba escribiendo una explicación ideal para un libro, pero perdí conexión con forosdelweb.com y perdí todo... así que ahora va la versión más resumida y hecha directamente desde Gmail (por las dudas)
Una fachada es eso, una fachada, un "representante" para acceder al paquete / capa.
Aclaración: una capa se representa como un paquete, pero un paquete no necesariamente es una capa (un paquete puede estar compuesto por muchos paquetes).
Para desacoplar y simplificar el acceso al paquete que ofrece servicios se puede aplicar
el patrón Facade.
Escenario 1: de la capa Presentación se accede directamente a todas las clases que se requieran, una por una, por consiguiente si lo representamos con UML se vería internamente como muchas flechas del exterior que apuntan a muchas clases del paquete Negocio.
Código PHP:
// Desde el paquete Presentación
Usuarios::getAll();
Facturas::getFromId( 1 );
Proveedores::getFromIdFactura( 2 );
etc.
Escenario 2: para simplificar la operativa, se crea una fachada / representante que recibe todas las peticiones del exterior, "no deja entrar a nadie", y les devuelve todos los datos que requieran, cambiando el diseño como muchas flechas del exterior que apuntan a una sola clase fachada del paquete / capa Negocio.
Código PHP:
// Desde el paquete Presentación
NegocioFachada::getUsuarios();
NegocioFachada::getFacturaFormId( 1 );
NegocioFachada::getProveedorFromFactura( 2 );
De esta forma, cada capa se comunica con la otra siempre a través de su fachada, y solo internamente la fachada interactúa con las clases concretas (es más, dentro de la fachada tendrás el mismo código que en el Escenario 1).
Nota: se pueden hacer variaciones, como por ejemplo, en vez de una Fachada hacer una Fábrica (o Fachada Fábrica) donde en algunos casos retorna la instancia de la clase que necesita, sin llegar a tener una dependencia directa contra la clase, solo contra la Fábrica.
Te recomiendo leer sobre
"bajo acoplamiento, alta cohesión".