El patrón Fachada proporciona una
interfaz unificada de alto nivel para un subsistema, que oculta las interfaces
de bajo nivel de las clases que lo implementan. Con esto se consiguen dos objetivos fundamentales: hacer el subsistema
más fácil de usar y desacoplar a los clientes de las clases del subsistema.
El patrón Fachada pertenece a la
categoría de patrones con propósito estructural y alcance de objeto, según la clasificación
de [Gamma]. Es decir, propone una manera de componer a sus participantes, en
este caso objetos, mediante relaciones determinadas dinámicamente en tiempo de
ejecución
Un cliente que trata de utilizar
los servicios ofrecidos por un subsistema actuando directamente sobre las
interfaces de las clases que implementan dicho subsistema se está exponiendo a
los siguientes inconvenientes:
-
Debe contener el conocimiento de cómo
funcionan esas clases, comprender perfectamente la semántica de sus complejas
interfaces de bajo nivel y saber cómo utilizarlas. En cada uno de los clientes
debe estar codificada la secuencia de mensajes que pondrá a las clases del
subsistema en colaboración para obtener el servicio deseado.
-
Debe mantenerse informado de los cambios
en dichas interfaces o en la distribución de responsabilidades entre las clases
de bajo nivel y actualizar su código adecuadamente.
-
Debe tomar las debidas precauciones para
mantener el subsistema en un estado consistente, y ha de saber cómo manejar los
errores que se puedan producir.
Todas estas circunstancias hacen
que los clientes del subsistema mantengan fuertes dependencias hacia muchas de las interfaces
de bajo nivel de las clases componentes, lo cual no permite a los clientes y la estructura del
subsistema variar independientemente.
Para resolver estos problemas se
debe aislar a los clientes de las interfaces de bajo nivel del subsistema
colocando entre ambos una clase denominada “fachada” del subsistema, cuya
interfaz pública recoja precisamente la semántica de los servicios
ofrecidos por el subsistema que
interesan a los clientes más habituales.
Esta clase “fachada” representa al
subsistema completo y muchas veces ambos tienen el mismo nombre. El valor que
añade esta clase es el ofrecer a los clientes una forma única y simplificada de
acceder a los servicios más generales del subsistema. Para ello, los clientes
enviarán mensajes solo a la fachada, y esta se encargará de poner en
funcionamiento la maquinaria del subsistema para conseguir el objetivo
pretendido y devolver al cliente los resultados.
Sin embargo, es posible que a
algunos clientes con necesidades especiales no les satisfaga completamente el
acceso simplificado pero limitado a la funcionalidad del subsistema que ofrece
la fachada. Es por esto que la fachada no restringe el acceso directo a las
clases de bajo nivel, solamente las oculta tras su interfaz a los clientes que
no las necesitan.
·
Cuando
utilizar el patrón fachada
Por todo esto se deberá aplicar el
patrón Fachada cuando se de alguna de las siguientes circunstancias:
-
Cuando por algún motivo se desee dotar de
una interfaz sencilla y usable a un
subsistema complejo. Una fachada proporciona una vista por defecto de la funcionalidad del subsistema suficiente para
la mayoría de los programadores.
-
Cuando se detecten demasiadas dependencias
entre las clases clientes de una
abstracción y las clases que implementan esta abstracción en un
subsistema. En este caso debe introducirse una fachada que permita diseñar a
los clientes y otros subsistemas para que dependan de una interfaz y no de una
implementación.
-
Cuando se quiera estructurar un sistema en
subsistemas siguiendo un patrón de capas. Será de gran ayuda dotar de una
fachada a cada nivel de subsistemas y utilizarla como punto de acceso al mismo.
De este modo se simplificará al máximo el mantenimiento de las dependencias
entre niveles.
-
Cuando se tenga un subsistema que ofrece
una funcionalidad muy rica y compleja y un conjunto significativo de clientes
que solo necesitan usar una parte reducida de la misma
·
Ventajas
del uso del patrón fachada
El uso del patrón Fachada aporta
las siguientes ventajas al diseño de subsistemas:
-
Desde el punto de vista de los clientes,
la fachada los aísla de los componentes del subsistema minimizando el número de
objetos con los que tienen que tratar para obtener un servicio.
-
Desde el punto de vista del subsistema el
uso de fachadas ayuda a organizar un sistema en capas, ayuda a controlar o
eliminar las dependencias complejas o circulares entre objetos y permite hacer
cambios en los componentes de un subsistema sin afectar a los clientes.
-
En general facilita enormemente el
desarrollo independiente de clientes y subsistemas y tiene consecuencias muy
importantes sobre la reusabilidad de los subsistemas, objetivo principal
perseguido por todos los patrones de diseño.
-
En grandes sistemas de software es muy
importante la aportación del patrón a la
-
reducción de dependencias de compilación y
portabilidad.
·
Desventajas
-
Oculta parte de la funcionalidad de un
subsistema. Esto es cierto para clientes que se decanten por la facilidad de
uso de la fachada, pero nada les impide mirar más allá de la misma para
aprovechar toda la generalidad del subsistema.
-
Introduce un nivel de indirección
adicional que podría afectar al rendimiento de la aplicación.
·
Estructura
del patrón Fachada (diagrama de clases)
·
Diagrama
de secuencia del patrón Fachada
No hay comentarios:
Publicar un comentario