Contexto
Andrea es ingeniero de software recién graduada que ocupa el puesto de arquitecto de software para una empresa desarrolladora de aplicaciones empresariales que recientemente dejó vacante Arturo tras 5 años. A Andrea le han asignado el diseño de un sistema empresarial que es uno de los proyectos más importantes de la empresa. Algunos programadores con experiencia creen que el diseño es una responsabilidad muy grande para alguien con poca experiencia.
Ante tal reto, Andrea se propone a diseñar una arquitectura de software adecuada a las exigencias del proyecto, por lo que procede a analizar a detalle toda la información documentada de la ingeniería de requerimientos.
Tras algunos días de arduo análisis, su jefe le hace la recomendación que revise los patrones de arquitectura genéricos y los diseños de otros proyectos que en el pasado se han utilizado, con el objetivo de determinar si existe algún patrón de arquitectura que pueda ajustarse a las necesidades de este nuevo proyecto. Esto le evitará tener que idear un diseño desde cero, además que los patrones describen soluciones que han sido exitosas en varios casos.
Explicación
Los patrones arquitectónicos permiten establecer una estructura general del software que ha sido empleada en diseños de aplicaciones de forma exitosa. A continuación se describen las arquitecturas de capas, modelo-vista-controlador, de repositorio y la arquitectura tubería y filtro.
7.1 Arquitectura en capas y modelo vista controlador
En opinión de Sommerville (2011), la arquitectura en capas permite separar en componentes independientes las características del software, ofreciendo la flexibilidad de realizar cambios de manera incremental sin afectar elementos del sistema que pertenecen a otras capas, incluso permite intercambiar capas equivalentes mientras la interfaz sea la misma o bien agregar facilidades a la capa adyacente cambiando la interfaz.
Haz clic en cada concepto para conocer más detalle.
Arquitectura en capas
Organiza el sistema en capas con funcionalidades relacionadas entre sí. Una capa da servicios a la capa de encima, de modo que las capas de nivel inferior representan servicios núcleo que es probable se utilicen a lo largo de todo el sistema.
Patrón de arquitectura en capas. Adaptación tomada del libro de Sommerville, I. (2011). Ingeniería de Software (9ª ed.). México: Pearson. Fig.6.6.
Un sistema para compartir documentos con derechos de autor que utiliza la arquitectura de capas.
El sistema de biblioteca se llama LIBSYS que es parecido a la biblioteca digital del Tecmilenio. Observa que en la capa inferior se encuentran las bases de datos que utilizan una interfaz para servir a la capa superior llamada “Índice de biblioteca”.
Arquitectura del sistema LIBSYS. Adaptación tomada del libro de Sommerville, I. (2011). Ingeniería de Software (9ª ed.). México: Pearson. Fig. 6.7.
Modelo – Vista – Controlador
Los desarrollos de aplicaciones web se han convertido ya en una necesidad para todas las organizaciones, porque permiten aprovechar las ventajas de la ubicuidad que ofrece el acceso a Internet y liberan al usuario de tener que instalar una nueva aplicación en cada computadora. Estos tipos de desarrollos utilizan un patrón de arquitectura llamado MVC o Modelo-Vista-Controlador.
La arquitectura MVC separa los elementos del sistema en componentes independientes, cada uno con una función específica, razón por la cual es muy parecida al patrón arquitectónico de capas. A continuación se muestran sus características:
Haz clic en cada concepto para conocer más detalle.
Modelo - Vista – Controlador (MVC)
El objetivo principal es permitir que la interfaz gráfica del usuario sea independiente del código del funcionamiento de la aplicación.
Este patrón arquitectónico divide en tres partes el diseño:
Modelo: gestiona el acceso y actualización de los datos de la aplicación y la lógica de procesamiento.
Vista: muestra una parte de los datos subyacentes e interactúa con el usuario. Habilita la presentación del contenido y la funcionalidad requerida por el usuario.
Controlador: gestiona el acceso al modelo y a la vista. Coordina el flujo de datos entre el modelo y la vista. Administra y notifica los cambios de estado.
Arquitectura MVC. Tomado del libro Sommerville, I. (2011). Ingeniería de Software (9ª ed.). México: Pearson. Fig. 6.3. Sólo para fines educativos.
El siguiente diagrama representa la arquitectura MVC de una WebApp.
El Controlador administra las solicitudes del usuario. Una vez que se reconoce el tipo de solicitud, envía al Modelo un pedido de comportamiento, éste accede a la base de datos y finalmente la Vista prepara los datos en el formato adecuado (HTML) para que pueda ser interpretado por el navegador del usuario.
Arquitectura MVC de una WebApp. Tomado del libro de Pressman, R. (2010). Ingeniería de Software. Un enfoque práctico. (7a. ed.). México: McGraw Hill. Fig. 13.8. Sólo para fines educativos.
Puedes encontrar el MVC en desarrollos de aplicaciones WEB, en interfaces de usuario como las clases de Swing de Java o en otros frameworks como el de ASP.Net de Microsoft.
7.2 Arquitectura de repositorio
Imagina cómo opera una compañía telefónica que ofrece servicios de telefonía móvil a sus clientes. Normalmente puedes encontrar 2 tipos de clientes, aquellos que tienen un servicio de prepago y los que tienen un plan. Esta compañía requiere registrar la cantidad y duración de las llamadas que realiza cada uno sus clientes de forma diaria. Ahora piensa en las áreas que necesitan de esa información: el área de Facturación necesita conocer los registros de cada cliente para generar la factura o disminuir el saldo disponible de los clientes en prepago. Mercadotecnia le interesa saber cuáles son los planes que más se han vendido o la ubicación geográfica de sus clientes. El área de Control de Fraudes estudiará si existe algún patrón de consumo anormal y detectar si existe algún cliente al que no se le está cobrando. Éstas y otras áreas de la compañía, requieren consultar los registros de llamadas para diferentes propósitos.
Para este tipo de escenarios es común encontrar una arquitectura de repositorio o centrada en datos.
Haz clic en cada concepto para conocer más detalle.
Repositorio o centrada en datos (Share Data Pattern)
Permite compartir y manipular grandes cantidades de datos a través de un repositorio central de información, un componente que administra el acceso a la información y un conector que lee y escribe los datos.
Es una solución adecuada cuando existen múltiples componentes independientes.
Architectura centrada en datos. Diagrama tomado del libro Pressman, R. (2010). Ingeniería de Software. Un enfoque práctico. (7a. ed.). México: McGraw Hill. Fig. 9.1. Sólo para fines educativos. .
El siguiente diagrama representa un sistema de administración empresarial que contiene tres tipos de componentes de acceso: aplicaciones Windows, aplicaciones web y programas que ejecutan scripts que accesan a la información sin ninguna interfaz gráfica del usuario llamados headless programs.
Como puedes observar, existe una esfera central de seguridad a la que todos los componentes del sistema deben acudir para corroborar las credenciales de acceso de los usuarios. .
Diagrama de la arquitectura de repositorio de un sistema de administración empresarial Tomado del libro Bass, L., Clements, P. y Kazman, R. (2012). Software Architecture in Practice. EE. UU: Addison - Wesley Professional.
Es útil en arquitecturas que requieren administrar grandes volúmenes de información por periodos extensos de tiempo como sistemas de información administrativa, sistemas CAD y entornos de desarrollo interactivo para software.
7.3 Arquitectura de tubería y filtro
Esta arquitectura funciona de forma parecida a una línea de producción en donde existe una banda que va transportando la materia prima, pasando a través de estaciones de trabajo que van moldeando las partes para generar con un producto terminado.
En la arquitectura de software, la materia prima sería la información que se va desplazando (tubería) a través componentes de procesamiento (filtro) que va transformando los datos hasta convertirlos en salidas útiles para el usuario.
Según Sommerville (2011), las transformaciones que sufre la información pueden realizarse de forma secuencial o en forma paralela, ítem por ítem o bien por lotes.
Haz clic en cada concepto para conocer más detalle.
Tubería y Filtro (Pipe & Filter)
Los datos fluyen (como en una tubería) de un componente a otro de forma sucesiva para su procesamiento hasta obtener información de salida útil.
Filtro: son componentes independientes que reciben información de entrada, la transforman en un proceso y generan salidas. Los filtros pueden ejecutarse de manera concurrente o asíncrona entre ellos, y pueden transformar información de forma incremental, es decir pueden producir más información de la que recibieron.
Tubería: es un conector entre el puerto de salida de un filtro al puerto de entrada del siguiente. Debe tener una sola fuente y tener un solo objetivo. Sólo transfiere la información no la transforma.
Según Bass, Clements y Kazman (2012), las características más importantes de la tubería son su capacidad de transferencia y almacenamiento de información (buffer size), velocidad de transmisión, protocolo de interacción y el formato de la información.
Arquitectura de tubería y filtro. Tomado del libro Pressman, R. (2010). Ingeniería de Software. Un enfoque práctico. (7a. ed.). México: McGraw Hill. Fig. 9.2. Sólo para fines educativos.
El siguiente ejemplo describe un sistema de tubería y filtro en el que se obtienen información de las facturas y pagos generados en un periodo de tiempo. Esta información se transforma en recibos de pagos y recordatorios de pagos no efectuados.
Ejemplo de arquitectura de tubería y filtro. Tomado del libro de Sommerville, I. (2011). Ingeniería de Software (9ª ed.). México: Pearson. Fig. 6.13. Sólo para fines educativos..
Esta arquitectura es ideal para aquellos sistemas en los que procesan grandes cantidades de información en batch o requieren registrar un gran número de transacciones. Una vez recopilada la información, se transfiere a otros procesos que la van depurando o manipulando hasta que finalmente la convierten en información útil para la toma de decisiones.
Cierre
Los patrones arquitectónicos genéricos que viste en este tema son soluciones que han sido utilizadas con éxito en varias situaciones. Hacer uso de ellos no sólo es una excelente forma de dar respuesta a un diseño, sino que además aseguran que puedan ser comprendidos por el resto del equipo técnico con mayor facilidad.
Al utilizar los patrones arquitectónicos, Andrea está aplicando una estrategia del diseño considerada como “mejor práctica” en el ámbito del desarrollo de sistemas, además que aporta al catálogo de diseño que han sido utilizados en otros proyectos.
Los patrones no son una camisa de fuerza a la que tienes que someter el diseño, sino una guía para establecer la arquitectura de una manera más sencilla. Cada arquitecto de software puede incluir ciertos ajustes al patrón que son importantes para el desarrollo del sistema y dan una mejor respuesta al software por desarrollarse. Los programadores, testers, administradores de bases de datos, utilizarán esta arquitectura como un marco de referencia para generar un producto de calidad.
Checkpoint
Asegúrate de poder:
Referencias