Patrones de Diseño J2EE
Para construir aplicaciones J2EE ,de un modo profesional, debemos conocer
técnicas avanzadas de análisis, diseño y desarrollo (podéis ver otro
tutorial donde hablábamos de
patrones de análisis).
Sun tiene una obra grandiosa (disponible
vía Web aunque es un libro que todos deberíamos tener en las estanterías)
donde nos propone una serie de patrones para ayudarnos a la construcción de
nuestras aplicaciones java. Sin su conocimiento, y el de algunas obras más, el
diseño y desarrollo de aplicaciones puede ser nefasto…
La labor de arquitecto de software (lo que antes era el tecnólogo de las
organizaciones) es muy duro y complejo, fundamentalmente por el entorno tan
cambiante dentro del mundo Java y las nuevas tecnologías en general (yo no paro
de estudiar y siempre me faltan cosas que probar).
Os ofrecemos un pequeño resumen de algunos de los patrones ofrecidos en la
obra de Sun, con algunos toques personales. Es un requisito para entenderlos
medianamente bien haber visto los patrones
GoF (en este enlace podéis leer sobre patrones).
Intercepting Filter | Cuando un cliente realiza una petición, se pueden realizar comprobaciones sobre ella de un modo transparente (por ejemplo: por si contienen código malicioso). La respuesta, también puede que nos interese tratarla (por ejemplo: La gracia es que estos filtros se pueden conectar en cascada y Es sencillo implementar este patrón con el uso de filtros que El uno de nuestros tutoriales anteriores podéis ver la
|
Front Controler | Los sistemas requieren de unos servicios centralizados de validación de parámetros, invocación de acciones de negocio, invocación a la vista adecuada (incluso dependiendo del tipo de dispositivo que realiza la petición) , etc… Un controlador se encarga de recoger las peticiones y unificar el Si recurrimos a los patrones de asignación de responsabilidad (GRASP) Podemos ver el núcleo de la creación de un controlador para
|
View Help | Un Helper es una clase que se encarga de aglutinar cierto código común. Es aplicable tanto para las capas de negocio como para presentación. Cuando hablamos de View Helper, hacemos referencia a clases que, Cuando hablamos de JSPs, la manera más práctica de implementar un Otro modo de hacerlo es a través de JavaBeans pero trataremos de
|
Composite View | Las aplicaciones Web reales agregan mucha información distinta (contenidos) en sus páginas, muchas veces poco relacionada con nuestro negocio (noticias, encuestas, estadísticas, cotizaciones, etc..). Normalmente, es necesario utilizar técnicas avanzadas de JSP (y sevlets) nos proporciona mecanismos sencillos para poder
|
Service to Worker | De los patrones vistos anteriormente, parece de sentido común que un framework de trabajo debe combinar todos los mecanismos. Service to worker define un marco global donde separar las distintas
|
Dispatcher View | Cuando en un controlador, debemos derivar la respuesta a un componente de presentación, normalmente deseamos separar su parte lógica de la física. Es decir, establecer un nivel más de indirección y poder intercambiar los elementos físicos de presentación de un modo transparente a la lógica de la aplicación. Esto además facilita la integración entre aplicaciones y la El controlador delega sobre el dispatcher la presentación de un El patrón MVC con servlet y JSPs utiliza un dispatcher aunque
|
Business Delegate | Si hemos decidido, en nuestras aplicaciones, la utilización de componentes complejos, (EJBs, JMS, etc) nos puede interesar simplificar su utilización (o abstraer la implementación para posteriormente poder cambiarla) a la capa de presentación. Podemos crear unas clases que hagan de proxy sobre las funciones Este nuevo nivel de indirección añade más trabajo pero mejora la En algunos entornos de desarrollo integrado, la construcción de Este patrón nos puede ayudar, combinado con otros, a resolver
|
Value Object | Una aplicación que utilice EJB de entidad, cada vez que accede a un atributo, está invocando a un método remoto. Además, existir multitud de mensajes para mantener la integridad del objeto. Un mecanismo sencillo, en multitud de aplicaciones, para solucionar En esta situación, podría adicionalmente existir un EJB de sesión Desde un punto de vista más simple, cuando invocamos un método una Aunque debemos no abusar. Este abuso se suele llamar Golden Hammer o
|
Session Facade | Las aplicaciones inician sencillas pero se van poco a poco complicando. Esto provoca que la capa de negocio se vea muchas veces condicionada por la capa de presentación. La capa de presentación es posible que, para controlar el flujo de Podemos crear un EJB de sesión que centralice las peticiones entre
|
Composite Entity | Uno de los principales problemas de diseño a la hora de utilizar EJBs de entidad, consiste en definirlos con un nivel muy bajo de atomicidad (objetos muy pequeños). Si estos objetos ya existen y debemos construir una aplicación, Adicionalmente deberíamos analizar el libro de Anti-ptrones J2EE
|
Value Object Assembler | Las aplicaciones J2EE es posible que utilicen un modelo de datos que esté compuesto por distintos tipo de objetos con distintos accesos (EJB de Entidad, JDO, JDBC, etc.). Para simplificar los accesos podemos crear un objeto que se encargue en ensamblar estos modelos.
|
Value List Handler | Una aplicación cliente puede requerir una lista de objetos que obtiene a través de la invocación de un servicio. Podemos crear un componente que, implementando un interfaz estándar, nos permita recuperar los valores e iterar por ellos (independientemente de la implementación) y realizar otras labores de valor añadido (como cachear los datos o reintentar su recuperación). Es conveniente revisar los interfaces de Java estándar para no
|
Service Locator | En nuestras aplicaciones tenemos que acceder a pilas de conexiones JDBC, a EJBs, a servicios asíncronos, etc.. Todos estos servicios requieren código particular (creación de Este localizador de servicios se encarga de retornarlos los recursos
|
Data Access Object | Los objetos de negocio requieren acceder a datos.
Estos datos pueden estar almacenados de modos distintos (EJBs, JDO, LDAP, El patrón DAO nos enseña como podemos hacerlo de un modo sencillo y Creo que es el patrón que hay que estudiar con mayor profundidad
|
Service Activator | Muchas aplicaciones no se pueden comportar de un modo síncrono, es decir, realizar una petición y esperar una respuesta inmediata. Numerosas veces es necesario realizar aplicaciones que envíen El patrón service activator nos proporciona un modelo simple que
|
Estos patrones realmente son un punto de partida para hacernos pensar sobre
problemas comunes en aplicaciones J2EE.
Solo el estudio de las técnicas de diseño y el esfuerzo de modelado
(utilizando UML para discutir con compañeros en un lenguaje común) nos
permitirá crecer como arquitectos …
Sobre esta base y repasando la arquitectura sobre la que se encuentra construido Java
y algunos de los Frameworks más importantes, podremos llegar a construir
aplicaciones de gran valor arquitectónico (evitando errores comunes)… eso
sí…. hay que estudiar un poquito …..