7 de julio de 2013

Session Facade

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