Patrones Arquitectónicos Esenciales para el Desarrollo de Aplicaciones Empresariales
Este documento describe diversos patrones de diseño y componentes arquitectónicos fundamentales en el desarrollo de aplicaciones empresariales, especialmente en entornos web y Java EE. Cada sección detalla el propósito del patrón, sus ventajas y sus posibles inconvenientes.
Controlador Frontal (Front Controller)
El Controlador Frontal es un punto de acceso único para el manejo de peticiones. Su objetivo es evitar la duplicación de lógica de control, aplicar lógica común a distintas peticiones y separarla del sistema de la vista. Es un patrón común en aplicaciones web.
Ventajas:
- Centraliza el control.
- Mejora la gestión de la aplicación.
- Fomenta la reutilización.
- Permite la separación de roles.
Controlador de Aplicación (Application Controller)
El Controlador de Aplicación busca centralizar y modularizar la gestión de vistas y acciones. Se utiliza para centralizar la recuperación e invocación de componentes de procesamiento de peticiones (comandos, vistas).
Ventajas:
- Mejora la modularidad.
- Fomenta la reutilización.
- Incrementa la extensibilidad.
Inconvenientes:
- Mayor número de objetos involucrados.
Objeto de Contexto (Context Object)
El Objeto de Contexto se utiliza para evitar el uso de información específica del protocolo del sistema fuera de su contexto. Si al controlador frontal le llegan datos fuera de contexto, esto provocaría un fuerte acoplamiento. Por ello, se usa un objeto de contexto para encapsular el estado de forma independiente del protocolo, permitiendo que sea compartido por la aplicación.
Ventajas:
- Mejora la reusabilidad y mantenibilidad.
- Facilita las pruebas.
- Reduce las restricciones en la evolución de las interfaces gráficas de usuario (GUIs).
Inconvenientes:
- Reduce el rendimiento.
Nota: Un ejemplo de su uso podría ser ENA(EventoRespuesta respuesta, Object datos)
.
Ayudante de Vista (View Helper)
El patrón Ayudante de Vista se compone de dos elementos: las vistas, que encapsulan el código de formateado, y los ayudantes (helpers), que encapsulan la lógica de procesamiento de la vista. La vista delega responsabilidades a sus clases ayudantes. Los ayudantes realizan el procesamiento con lógica de formateo.
Ventajas:
- Fomenta la partición.
- Mejora la reutilización.
- Facilita el mantenimiento.
- Permite la separación de roles.
- Facilita las pruebas.
Inconvenientes:
- Puede llevar al uso excesivo de scriptlets (código Java incrustado en JSP).
Trabajador de Servicio (Service Worker)
El Trabajador de Servicio articula en el mismo patrón al controlador frontal, el controlador de aplicación y el ayudante de vista. Se utiliza para centralizar el control y manejo de peticiones con el fin de obtener un modelo antes de devolver el control a la vista.
Ventajas:
- Centraliza el control.
- Mejora la modularidad.
- Facilita el mantenimiento.
- Permite la separación de roles.
Inconvenientes:
- Es un patrón complejo de implementar.
Filtro Interceptor (Intercepting Filter)
El Filtro Interceptor permite interceptar y manipular peticiones y respuestas antes y después del procesamiento de una petición. Un gestor combina filtros débilmente acoplados en una cadena, delegando el control al filtro adecuado.
Ventajas:
- Centraliza el control con manejadores de bajo acoplamiento.
- Mejora la reusabilidad.
Inconvenientes:
- Compartir información entre filtros puede ser ineficiente.
Vista Compuesta (Composite View)
La Vista Compuesta utiliza vistas compuestas de múltiples subvistas atómicas, y cada una es incluida dinámicamente en el total, para que la página pueda ser manejada independientemente del contenido.
Ventajas:
- Mejora la modularidad.
- Fomenta la reutilización.
- Facilita el mantenimiento.
- Permite el control por rol.
Inconvenientes:
- Puede reducir el rendimiento.
Despachador (Dispatcher)
El Despachador se usa como punto de acceso principal a las peticiones. Existen dos tipos:
- Respuesta estática: como HTML.
- Respuesta dinámica: un campo almacenado en sesión reutilizable en distintas vistas.
Ventajas:
- Aprovechamiento de marcos y librerías.
Inconvenientes:
- Potencial falta de separación de la vista del modelo y la lógica de control.
Servicio de Aplicación (Application Service)
El Servicio de Aplicación se utiliza para centralizar y agregar comportamientos, proporcionando una capa de servicio uniforme.
Ventajas:
- Centraliza la lógica de negocio y el flujo de trabajo reutilizable.
- Mejora la reusabilidad de la lógica de negocio.
- Evita duplicar código.
- Simplifica la implementación de fachadas.
Inconvenientes:
- Introduce un nivel más de indirección.
Objeto de Transferencia (Transfer Object / Data Transfer Object – DTO)
El Objeto de Transferencia independiza el cambio entre dos capas. Mueve elementos de datos entre capas y son objetos serializables.
Ventajas:
- Ayuda a independizar capas.
Inconvenientes:
- Puede introducir objetos con datos no actualizados.
Objeto de Negocio (Business Object)
El Objeto de Negocio se utiliza para separar los datos del negocio y la lógica, usando un modelo de objetos. Encapsulan y manejan datos de negocio, comportamiento y persistencia.
Ventajas:
- Promueve la aproximación orientada a objetos en la implementación del modelo de negocio y la reutilización.
- Evita la duplicación de código y mejora la mantenibilidad.
- Separa la lógica de persistencia de la lógica de negocio.
Inconvenientes:
- Puede promover datos caducados.
- Tiene una persistencia compleja.
- Añade una capa de indirección.
- Produce objetos inflados.
Entidad Compuesta (Composite Entity)
La Entidad Compuesta se utiliza para implementar objetos de negocio persistentes como entidades JPA. La entidad compuesta agrega un conjunto de objetos de negocio relacionados en entidades JPA.
Ventajas:
- Reduce la dependencia del esquema de la base de datos.
- Incrementa la granularidad de los objetos.
Ensamblador de Objetos de Transferencia (Transfer Object Assembler – TOA)
El Ensamblador de Objetos de Transferencia (TOA) se utiliza para construir el modelo de la aplicación como un objeto de transferencia compuesto, que agrega distintos objetos de transferencia de diversos componentes y lo devuelve al cliente.
Ventajas:
- Separa la lógica de negocio.
- Simplifica la lógica del cliente.
Inconvenientes:
- Puede introducir datos desactualizados.
Manejador de Lista de Valores (Value List Handler)
El Manejador de Lista de Valores se utiliza para buscar, cachear resultados y permitir al cliente recorrer y seleccionar los elementos de los resultados.
Ventajas:
- Cachea resultados de búsqueda y ofrece búsquedas flexibles.
- Mejora el rendimiento de la red.
- Evita sobrecarga en transacciones.
- Fomenta la partición en capas.
Inconvenientes:
- Puede ser costoso.
- Los datos pueden estar desactualizados.
Delegado de Negocio (Business Delegate)
El Delegado de Negocio se utiliza para encapsular el acceso a servicios de negocio, ocultando los detalles de implementación.
Ventajas:
- Reduce el acoplamiento.
- Mejora la modularidad.
- Mejora la disponibilidad.
- Expone una interfaz simple.
Inconvenientes:
- Introduce un nivel adicional de indirección.
- Oculta la localización de servicios remotos.
Fachada (Facade)
La Fachada se utiliza para encapsular componentes de la capa de negocio y exponer servicios de grano grueso a clientes remotos. Un cliente accede a una fachada en lugar de a los componentes individuales del negocio.
Ventajas:
- Reduce el acoplamiento entre capas.
- Reduce la complejidad.
- Reduce el número de métodos remotos de grano fino.
- Mejora el rendimiento.
- Centraliza la gestión de seguridad y el control de transacciones.
- Expone menos interfaces remotas a los clientes.
Localizador de Servicio (Service Locator)
El Localizador de Servicio se utiliza para implementar y encapsular el servicio y los componentes de búsqueda.
Ventajas:
- Abstrae la complejidad.
- Proporciona a los clientes un acceso uniforme a los servicios.
- Mejora el rendimiento de la red y del cliente al cachear los servicios.
Objeto de Acceso a Datos (Data Access Object – DAO)
El Objeto de Acceso a Datos (DAO) se utiliza para abstraer y encapsular todo el acceso al almacén persistente, ya que gestiona la conexión con la fuente de datos para obtener y almacenar datos.
Almacén de Dominio (Domain Store)
El Almacén de Dominio separa la persistencia del modelo de objetos. Se utiliza para persistir de manera transparente un modelo de objetos.
Ventajas:
- Resuelve la persistencia.
- Permite la carga dinámica.
- Gestiona transacciones y concurrencia.
Inconvenientes:
- Es complejo de implementar.
- Requiere técnicas de optimización.
Agente de Servicio Web (Web Service Agent)
El Agente de Servicio Web se utiliza para exponer y negociar con uno o más servicios usando XML y protocolos web.
Ventajas:
- Introduce una capa entre el cliente y el servicio.
Activador de Servicio (Service Activator)
El Activador de Servicio se utiliza para recibir peticiones asíncronas e invocar uno o más servicios de negocio.
Ventajas:
- Integra Java Message Service (JMS) en aplicaciones empresariales.
- Proporciona procesamiento asíncrono con cualquier componente de la capa de negocio.
- Tiene listeners independientes.
Microarquitectura de Trabajo Web (Web Tier Micro-Architecture)
La Microarquitectura de Trabajo Web separa la lógica de negocio y la de procesamiento, logrando una clara separación de preocupaciones. Crea una separación de roles de seguridad entre la lógica de negocio y el procesamiento.
Inconvenientes:
- Requiere conocimiento adicional.
- Implica el mantenimiento del flujo de trabajo (workflow).