enlaces

Anuncio
WebSA (Web Software Architecture)
En los últimos años, dentro del desarrollo de aplicaciones web han surgido una gran variedad de
metodologías basadas en UML que abordan con éxito la especificación de la navegación y presentación
que dicho tipo de aplicaciones exige. Sin embargo, obligados por un mercado cada vez más competitivo
que exige una continua evolución de las aplicaciones hipermedia y el aumento en la complejidad que
implica su desarrollo, se hace necesario recoger requisitos de calidad que van a darnos la posibilidad de
abordar con éxito su desarrollo y posterior mantenimiento.
Siguiendo una aproximación DSSA (Domain-Specific Software Architecture) para abordar la
especificación de la arquitectura software de una aplicación Web, vamos definir un conjunto de modelos
basándonos en el estándar MDA (Model-Driven Architecture) que nos van a proporcionar diferentes
vistas y niveles de abstracción, para definir un proceso de refinamiento que va a permitirnos especificar
casi por completo el código de una aplicación web requiere.
1. Introducción
Actualmente en un mercado tan competitivo como es internet, nos encontramos con
la necesidad de desarrollar las aplicaciones web cada vez más complejas y en el menor
tiempo posible. Además dichas aplicaciones deben cumplir con una serie de requisitos
de calidad como son el rendimiento, la usabilidad, la escalabilidad, el mantenimiento,
etc. para poder satisfacer a unos usuarios muy exigentes. Esto conduce a que su
desarrollo capture dichos requisitos y los incorpore en el resto de las fases del ciclo de
vida.
En los últimos años, dentro de la ingeniería del software ha nacido un nuevo
paradigma como es el Web Engineering, en el cual se han definido una colección de
metodologías cada una de las cuales especifica con mayor o menor acierto la
problemática que un desarrollo web exige. Sin embargo, salvo excepciones como
[Conallen99], [Hassan02] las metodologías se preocupan en capturar los aspectos
funcionales, navegacionales y de presentación de una aplicación, y olvidan los
requisitos de calidad o no funcionales, que expresados mediante la arquitectura del
software [Bass00] son capaces de completar las necesidades que dicha aplicación
requiere. Como indica Grady Booch [Booch01] refiriéndose a las aplicaciones web: “En
mi experiencia, la presencia (o ausencia) de una buena arquitectura es un elemento
esencial para predecir el éxito o fracaso de un proyecto”.
Por otro lado, existen una gran diversidad de aplicaciones web cada una de las
cuales difiere tanto en número de clientes potenciales (desde pequeñas intranets a
grandes aplicaciones en internet), como en los mecanismos de seguridad que se
requieren (desde aplicación bancaria a una web de humor) , los cambios a los que está
sujeta en un futuro (un sitio web contra una aplicación de administración), etc.
Por todo ello basándonos en la experiencia en el desarrollo de aplicaciones para web,
hemos planteado una aproximación que capture a través de un conjunto de modelos
UML y siguiendo una aproximación compatible MDA [OMG01], las diferentes vistas
en las que se compondría una aplicación web. Nuestra propuesta se basa en la definición
de una arquitectura software para web, utilizando una aproximación del tipo DSSA
(Domain-Specific Software Architecture), que se basa en el estudio de un dominio para
restringir el espacio del problema y de la solución.
1
En nuestro caso, centrados en el dominio específico de las aplicaciones web a nuestra
aproximación le llamamos WebSA (Web Software Architecture).
Para su definición, se sigue un proceso de desarrollo que implica realizar
inicialmente un proceso de recogida de requisitos de usuario, en el cual obtendremos
tanto requisitos funcionales como los no funcionales. Estos últimos expresados a partir
de un conjunto de atributos de calidad claramente clasificados. A partir de dichos
requisitos, se efectúa la definición de un conjunto de modelos expresados mediante
UML y siguiendo el estándar MDA, cada uno de los cuales se encarga de recoger una
vista diferente de la aplicación. Además, cada uno de los modelos se encuentran
relacionados entre sí, ya sea mediante la trazabilidad de cada una de las vistas, o
mediante los procesos de mapeo de los modelos que se encuentran en diferentes niveles
de abstracción. Definimos por lo tanto un perfil UML a partir de la extensión
conservadora del metamodelo UML, esto nos permitirá formalizar sus relaciones y
poder recoger de la forma más completa una aplicación web.
Para la implementación de las diferentes vistas, WebSA ha extendido la
reconocida metodología OO-H [Cachero00] definida para el desarrollo de una
aplicaciones hipermedia en las fases de análisis y diseño. Incorporándole por un lado la
recogida de los requisitos no funcionales, a partir de los cuales se definirán nuevas
vistas a la aplicación, que van a aportar la información sobre la arquitectura software y
la vinculación de los aspectos funcionales y no funcionales. Dándonos así la definición
completa y necesaria de una aplicación web, que nos va a permitir obtener un entorno
de compilación de modelos traslativos[Bell98] y generar el código para cualquier tipo
de aplicación web.
En los siguientes puntos vamos a especificar inicialmente una introducción a la
aproximación WebSA en la que explicaremos en que se basa una arquitectura DSSA.
Entraremos en la explicación de la diferentes vistas en las que dividimos una aplicación
web, para posteriormente definir el metamodelo que va a formalizar nuestra
aproximación. Seguidamente vamos justificar el uso de la arquitectura del software,
para entrar a explicar cada una de las fases en las que se compone las vistas de
arquitectura. Para la arquitectura lógica veremos las diferentes fases en las que se
compone, descomposición en subsistemas, descomposición en componentes abstractos
y la integración de componentes..
2
2. Introducción a WebSA
Para entender que es WebSA, primero vamos a definir que significan las dos últimas
siglas, “SA”, es decir, la Arquitectura del Software que en ocasiones sigue siendo la
gran desconocida dentro de la ingeniería del software, pero que en los últimos años está
tomando una gran relevancia.
Existen múltiples definiciones de arquitectura del software, pero de todas ellas vamos a
quedarnos con dos definiciones que considero que más han influido en este trabajo.
Definición de [Bass97]:
“La arquitectura del software de un programa o un sistema de computación es la
estructura o estructuras del sistema, las cuales comprenden componentes software,
las propiedades visibles de estos componentes y las relaciones entre ellos”.
De esta definición lo más importante es el hecho que define claramente cuales son los
elementos que ha de recoger la arquitectura. Sin embargo, otra definición que aporta
más contenido al mencionar las propiedades no funcionales es la de [BMR+96]:
“Es la descripción de los subsistemas y componentes de un sistema software y las
relaciones entre ellos, típicamente representado mediante vistas que muestran las
propiedades funcionales y no funcionales más relevantes.
El intento de esta definición es indicar que la arquitectura del software debe abstraerse
de alguna información del sistema (de otra manera no estaríamos apuntando a la
arquitectura, estaríamos viendo todo el sistema) y aun así proveer suficiente
información para ser la base para el análisis, toma de decisión, y por lo tanto reducción
de riesgos.
Definición de WebSA:
WebSA es una metodología para la definición de arquitecturas software de las
aplicaciones web, la cual se basa principalmente en 2 aspectos:
1. La definición de la arquitectura a través del paradigma DSSA (Domain Specific
Software Architecture),es decir, de las arquitecturas software de dominio
específico, que en su caso fija el dominio en el desarrollo de aplicaciones web.
2. Dicha metodología además se basa en la definición de arquitecturas mediante
múltiples vistas concurrentes, para ello se vale de la utilización del estándar
MDA, que nos permite definir un conjunto de modelos UML, dándole la
formalidad necesaria con la utilización de estándares como MOF para la
definición de los elementos de modelado, y de OCL, para la definición de
restricciones.
A continuación vamos a entrar en más detalle justificando el uso de dichos
paradigmas.
3
2.1 Una aproximación DSSA
Como indica el autor [Coglianese92], una arquitectura expresada mediante una
aproximación DSSA se basa en la siguiente asunción: ‘El desarrollo de sistemas en un
dominio bien conocido es un proceso de emparejamiento de los requerimientos hacia
aproximaciones conocidas para aportar soluciones en ese dominio”.
Como hemos comentado WebSA se especializa en un dominio de aplicación
específico como son las aplicaciones web, que implica restringir tanto el espacio del
problema como el espacio de la solución, lo que lleva en muchos casos a que el
desarrollo de diferentes sistemas software sea bastante similar. Como menciona
[Nilson94], el desarrollo de una arquitectura DSSA se basa en el estudio de las
propiedades comunes y diferencias entre las aplicaciones de un dominio. A este proceso
se lo denomina “ingeniería de dominio”.
Las propiedades más importantes de una arquitectura DSSA [Hoffmann96] que
deseamos cumplir con WebSA son:
• Trabajar en un espacio del problema y de la solución restringidos.
• Genericidad, para poder adaptar el DSSA a un desarrollo en concreto.
• Un nivel de abstracción adecuado para abarcar todo el dominio.
• Elementos de reuso dentro del proceso de desarrollo que son típicos de cada
dominio.
Como veremos seguidamente, cada uno de estos puntos van a ser perseguidos,
además de pretender principalmente que WebSA defina correctamente el dominio de las
aplicaciones web. Entre las propiedades anteriores destacamos principalmente el hecho
de que trabajar en un espacio de solución restringido nos facilitará la tarea de identificar
la funcionalidad de ciertos componentes que en otras ocasiones sería imposible, por otro
lado, también consideramos importante que el nivel de abstracción adecuado nos va
permitir recuperar elementos de reutilización.
Siguiendo la definición de una arquitectura DSSA, nuestra aproximación parte
inicialmente de una fase de recogida de requisitos en la que vamos a incorporar a los
tradicionales requisitos funcionales recogidos mediante casos de uso, y de los requisitos
no funcionales recogido a través de escenario de calidad. Ambos conjuntos de requisitos
van a ser el punto de partida para el posterior análisis y diseño, donde como veremos
aparece la especificación tanto de los aspectos funcionales como los aspectos
meramente arquitectónicos. Dichos ámbitos van a estar especificados a través de
diferentes vistas interrelacionadas mediante relaciones de dependencia definidas en un
metamodelo UML común.
A continuación vamos a mostrar la otra parte principal de nuestra aproximación que es
el uso de MDA para la especificación de los diferentes modelos especificados dentro de
nuestra aproximación.
4
2.2 Definición de arquitectura web mediante MDA
Utilizando la definición de arquitectura que menciona [Conallen99]: “Mirar la
descripción de una arquitectura es como una versión condensada de todo el conjunto
de artefactos de desarrollo”. Nuestra aproximación se basa en la separación en
diferentes vistas concurrentes de la representación del todo el sistema web, para ello nos
vamos a valer del estándar definido en la OMG llamado MDA.
MDA [OMG2001] define una aproximación para la especificación de sistemas cuyo
principio es la separación de la funcionalidad del sistema de los aspectos dependientes
de la plataforma destino. Esto lo realiza mediante una arquitectura de modelos que
provee un conjunto de guías para estructurar las especificaciones expresadas como
modelos.
Como vemos en la definición de MDA, existen dos aspectos diferenciados, la
separación con la plataforma destino, que en nuestro caso es importante, ya que la
arquitectura la vamos a definir a un nivel de abstracción donde la plataforma no se
especifica, y además nos va a facilitar el hecho de que proporcionan mapeos a
plataformas como J2EE, .NET y CORBA. Y el siguiente aspecto y no menos
importante es la aportación de una arquitectura de modelos, la cual está definida a partir
de los conceptos de vista, refinamiento y abstracción que nos van a permitir definir un
conjunto de modelos interrelacionados con diferentes vistas y en diferentes niveles de
abstracción que nos permitirá realizar un seguimiento durante todo el ciclo de vida.
Las principales ventajas que nos aporta la aproximación MDA son:
• Integración con sistemas legados .
• Utilización de estándares como UML, XMI, CWM que nos proporcionan la
posibilidad de intercambiar nuestros modelos a cualquier herramienta que sea
compatible UML.
• La formalización a través MOF y OCL de todos los modelos definidos a partir
de UML.
• Reducción de costes durante todo el ciclo de vida de la aplicación.
• Rápida inclusión de los beneficios de las tecnologías emergentes en sus sistemas
existentes.
Existen trabajos previos que han abordado con éxito la especificación de la arquitectura
de una aplicación tratando por separado las vistas que la constituyen, los más
importantes son los de [Kruchten95] el cual define 4+1 vistas concurrentes para definir
un sistema, y posteriormente [Hofmeister99] que separa en 4 vistas la arquitectura
software. Sin embargo, ambas aproximaciones se basan únicamente en UML, y se
definen para expresar cualquier tipo de arquitectura, mientras que en nuestra
aproximación se hace uso de MDA y además está fijada en el dominio de las
aplicaciones web lo que nos va a permitir llegar a un nivel de detalle mucho mayor.
A continuación, vamos a definir el conjunto de vistas de WebSA. Entendiendo por
vista, como un conjunto de artefactos creados en el proceso del desarrollo del software.
Estas vistas se definen como una extensión de las vistas definidas en la metodología
OO-H. OO-H define las vistas existentes en la parte funcional de la aplicación web, y
5
sobre dichas vistas vamos a incorporar aquellas que tratan los aspectos no funcionales,
tanto en la parte de requisitos como en la arquitectura, además de establecer la
trazabilidad entre cada una de las partes lo que nos va a permitir expresar aspectos que
únicamente se pueden tratar cuando la parte funcional y no funcional están juntas.
Además, cada una de las vistas las vamos a agrupar dentro de lo que se denomina punto
de vista (viewpoint). Un punto de vista es una colección de vistas que comparten un
conjunto de asuntos.
Los puntos de vista las vistas que contienen son las vistas definidas son las
siguientes:
Punto de Vista de Requisitos:
Realizado durante la fase de requisitos, en el los analistas recogen la información
necesaria a partir de la cual vamos a especificar el sistema.
1. Vista Requisitos Funcionales: En dicha vista se expresan mediante los casos de
uso que recogerían los requisitos funcionales.
2. Vista Requisitos No Funcionales: En esta vista se expresan mediante
escenarios de calidad los requisitos no funcionales.
Punto de Vista Funcional:
A partir de los requisitos de usuario especificados en la fase anterior se definen un
conjunto de vistas que van a recoger la funcionalidad de un sistema web. Dichas vistas
están definidas en la metodología OO-H:
3. Vista Conceptual: Expresa la funcionalidad del sistema de información sobre el
que se define la aplicación.
4. Vista de Presentación: se preocupa de indicar cual va ser el aspecto de la
aplicación y la funcionalidad asociada a esta.
5. Vista de Navegación: expresa cada una de las interacciones que el usuario
realiza para transcurrir a través de los diferentes escenarios de la aplicación.
6. Vista Procesos: expresa cuales son las actividades de los procesos y el flujo de
los procesos, estableciendo que actividades deben procesarse en secuencia o en
paralelo.
Punto de Vista de Arquitectura:
A partir de los requisitos funcionales y no funcionales se definen las vistas que
tradicionalmente se han denominado de arquitectura, y son la principal aportación del
este trabajo:
7. Vista de la Arquitectura Lógica: expresa cuáles son los componentes lógicos
(subsistemas, módulos o componentes software) que participan en nuestra
solución, y la relación entre ellos.
8. Vista de la Arquitectura Física: expresa cuáles son los componentes físicos
que participan en nuestra solución, y la relación entre ellos (clientes, servidores,
redes, BD, etc).
Una vez hemos enumerado las vistas que constituyen una arquitectura WebSA,
necesitamos indicar cuales son las relaciones que existen entre cada una de ellas. Esto lo
vamos a formalizar mediante un metamodelo UML. Por metamodelo se definimos lo
siguiente:
6
Metamodelo: Un metamodelo es una definición precisa de los elementos de modelado,
sus relaciones y de reglas bien formadas necesarias para crear modelos semánticos.
En nuestra aproximación, hemos utilizado UML para definir el metamodelo, esto nos va
a permitir formalizar y relacionar cada unas de las vistas de la arquitectura WebSA,
además de poder establecer una trazabilidad entre los diferentes elementos de las vistas.
Requirements ViewPoint
Functional
Requirements View
Functional ViewPoint
Non-Functional
Requirements View
Architectural ViewPoint
Conceptual
View
Presentation
View
Process View
Navigational
View
Logic A rchit ectural
Vi ew
Physical
Architectural View
Figura 1. Modelo de dependencia entre las vistas WebSA.
Como se puede apreciar en la figura 1, el sistema se define inicialmente a través
de un punto de vista de requisitos que contiene las vistas de requisitos funcionales y no
funcionales, que recogen la información necesaria a partir de la cual se van a constituir
tanto la vista funcional, representados por las cuatro vistas de OO-H, como las vistas no
funcionales que serían recogidos por las vistas de Arquitectura lógica y física.
Conviene remarcar que existen dependencias a la hora de elaborar cada una de
las vistas del sistema, así por ejemplo en el punto de vista funcional se hace necesario
establecer las vistas de proceso y conceptual, para poder tener luego la vista
navegacional y a continuación la vista de presentación. Además, en el punto de vista
arquitectónico, inicialmente definimos una vista de arquitectura lógica para
posteriormente tener la correspondencia a nivel físico en la vista de arquitectura física.
Por otro lado existe una interdependencia mutua entre las vistas de la parte
funcional y las vistas de la parte de arquitectura, es decir, ambas partes están vinculadas
por relaciones de dependencia, lo que nos va a permitir en muchas ocasiones tomar
decisiones en la parte funcional en función de aspectos recogidos en la arquitectura, y
viceversa.
A continuación vamos a entrar a describir una de las vistas descritas de la
arquitectura, la arquitectura lógica, que como veremos se compone a su vez de un
conjunto de modelos cada uno de los cuales va a estar localizado en diferentes niveles
de abstracción. En posteriores trabajos mostraremos el modelo de arquitectura física.
7
3. Arquitectura Lógica
Como hemos indicado anteriormente, dicha arquitectura se encarga de expresar
cuáles son los componentes lógicos (subsistemas, módulos o componentes software)
que participan en nuestra solución y la relación entre ellos. Dicha arquitectura va a
inferirse a partir de los requisitos funcionales y no funcionales definidos en fases
anteriores.
Para conseguir emparejar cada uno de los requisitos no funcionales recogido en la fase
de requerimientos con el diseño arquitectónico especificado en las vistas de
arquitectura, vamos a utilizar por un lado los patrones, definidos a diferentes niveles de
abstracción, que nos va a dar indicar cuales son los requisitos que cumplen en cada uno
de los casos, y por otro, cuales son las operaciones unitarias que se están realizando al
aplicarse. Por otro lado, en el caso de los requisitos funcionales como veremos estos se
van a intervenir a través de un mapeo con los componentes de la arquitectura, y fijado a
través de las relaciones establecidas entre las diferentes vistas en el metamodelo de
WebSA.
Existen muchas técnicas y lenguajes para especificar la arquitectura lógica de un
sistema. Nosotros utilizaremos una nomenclatura basada en UML siguiendo otras
aproximaciones como [Hofmeister99, Kruchten95] que nos aporta una serie de ventajas
como la posibilidad de formalizar la aproximación mediante un metamodelo estándar
UML permitiéndonos la utilización de herramientas existentes, además utilizando otros
estándares OMG que nos proporciona MDA, para poder hacer mapeos entre las
diferentes vistas.
Nuestra aproximación divide en 3 modelos cada uno correspondiendo a 3 fases
dentro del diseño de la arquitectura lógica, cada una de estas fases va a estar situada en
un nivel de abstracción distinto, que nos va a permitir recoger diferentes aspectos de la
arquitectura, y poder captar todos los requisitos especificados por el usuario:
1. Modelo de Subsistemas: Denominado tradicionalmente como diseño
estructural, define cuales son los subsistemas que van a constituir nuestra
aplicación.
2. Modelo de Configuración de Componentes Web: Consiste en refinar cada
uno de los subsistemas descomponiéndolos en cada uno de los componentes
abstractos propios de una aplicación web, expresándose de forma
independiente de dominio y de plataforma.
3. Modelo de Integración de Componentes Web: Consiste en definir cuales
son los componentes y módulos concretos una vez está apareados con el
dominio del problema.
Como vemos cada uno de estos modelos tiene una dependencia de forma que el modelo
de configuración de componentes guarda las restricciones establecidas por el modelo de
subsistemas, y de la misma manera, el modelo de integración ha de mantener las
relaciones establecidas con el modelo de configuración.
En los siguientes puntos vamos a definir detalladamente cada uno de estos modelos.
8
3.1
Modelo de Subsistemas (M.S.)
El modelo de subsistemas denominado tradicionalmente diseño estructural tiene que
ver con el diseño de las macrocomponentes de nuestra aplicación. Esta fase localizada
en el nivel de abstracción más alto en el diseño arquitectónico, consiste en definir
claramente cuales van a ser los subsistemas que van a constituir nuestra aplicación.
Cada uno de los subsistemas van a estar identificados con una capa lógica de la
aplicación. Dicha separación por capas es un principio que nos va a ayudar a reducir la
complejidad de los sistemas, basándose en el patrón “layering approach”[BMR+96].
La reducción de las dependencias entre los módulos y el tratamiento local de los
cambios, la portabilidad y la reutilización son aspectos bien conocidos de una
aproximación estratificada por capas. Tradicionalmente se ha definido un modelo de
arquitectura de 3 capas para las aplicaciones cliente/servidor [BMR+96].
Sin embargo, cada una de estas capas podrían llegarse a refinar aun más, el modelo
“Seeheim-model” [NoSc99] distingue 6 capas diferentes una aplicación, ver Figura 2.
Modelo 3 Capas
Modelo 6 Capas
Presentación
Interfaz de Usuario
Control de Usuario
Control de procesos
Lógica de Negocio
Objetos de Negocio
Acceso a Datos
Persistencia
Física de Datos
Figura 2. Refinamiento del modelo de capas.
Cada una de estas divisiones las vamos a realizar basándonos en unos patrones de
arquitectura situados en este nivel de abstracción llamados “patrones de distribución”
definidos por [ReWo97].
A continuación definimos cual es la funcionalidad de cada una de las capas, cual es el
patrón que se aplica para su división, y la explicación de cada una de las capas.
Seguidamente entraremos a explicar cada patrón más detalladamente. Las capas son las
siguientes:
9
Interfaz de Usuario: Capa encargada de dotar de la funcionalidad necesaria para la
interacción entre el usuario y la aplicación, el patrón distribución que divide ambas
capas se denomina “presentación distribuida”, y divide en el refinamiento en 2
subcapas:
Presentación: Se encarga de una capa distribuida que se encarga de dotar
únicamente la funcionalidad de aspecto, y recibir las peticiones del usuario que
en algunos casos serán validadas.
Control de Usuario: Capa que se encarga de recibir las peticiones del usuario,
gestionando la navegación del interfaz de usuario, y redireccionando las
peticiones a la lógica de negocio, la cual procesará la petición y devolverá un
resultado al control de usuario.
Lógica de Negocio: Esta es la parte del sistema que resuelve las reglas de negocio
especificadas para el dominio del problema. Si aplicamos el patrón de distribución
“Núcleo de Aplicación distribuido” podemos dividirla en dos subcapas:
Procesamiento de Control: Esta parte del sistema se encarga de atender las
peticiones que se reciben del cliente, convirtiéndolas en procesos que se
realizará de forma transaccional o no, de forma síncrona o asíncrona.
Objetos de Negocio: En dicho subsistema residen los elementos que contienen la
representación de los objetos definidos en el dominio del problema
Persistencia: Como su nombre indica, es la parte del sistema encargada del dotarle de
persistencia al sistema de información. Dada la división marcada por la aplicación del
patrón “Base de Datos Remota”, la funcionalidad se distribuye en 2 subcapas:
Acceso a Datos: Este subsistema se encarga de contener aquellos elementos que
permiten el acceso a los datos físicos desde la capa de lógica de negocio
Capa Física de Datos: Este subsistema determina cuales van a ser las fuentes
físicas de datos que va a contener nuestro sistema.
Como hemos indicado a este nivel de abstracción vamos a recoger los patrones
arquitectónicos de distribución definidos por [ReWo97], cada uno de los cuales va a
dividir la arquitectura en diferentes subsistemas cliente y servidor. La decisión de
adoptar un estilo de distribución particular va a estar dirigida por los requerimientos no
funcionales. Cada uno de los patrones va a estar influenciado por un conjunto de
fuerzas, cuya intensidad viene marcada por los requerimientos del sistema, e indicarán
si finalmente aplicamos o no dicho patrón.
A continuación pasamos a explicar los patrones de distribución identificados, y los
motivos por los cuales se aplican:
1. Presentación Distribuida: Este patrón separar el sistema de la componente
de presentación. Una parte de la componente de presentación es una unidad
distribuida y es procesada separadamente de la otra parte de la presentación
la cual puede ser empaquetada junto con otras capas de la aplicación. Este
patrón nos permite una fácil implementación y clientes muy finos.
Anteriormente eran los sistemas Host con sus terminales 3270 el ejemplo
clásico. Pero hoy en día son los clientes ligeros web, html y flash los que
mejores ejemplos de la aplicación de este patrón.
10
2. Interfaz de Usuario Remoto: En lugar de distribuir cierta parte de la
funcionalidad de la presentación, en este caso todo el interfaz se convierte en
una unidad de distribución y actúa como cliente del núcleo de la aplicación
en la parte servidora.
3. Núcleo de la Aplicación Distribuido: Este patrón divide el núcleo de la
aplicación en dos partes las cuales son procesadas de forma separada. Este
patrón se convierte realmente interesante cuando las transacciones expanden
los límites de los procesos (procesamiento de transacciones distribuidas).
4. Base de datos remota: La base de datos es el componente más grande de un
sistema de información con requerimientos especiales en la ejecución de su
entorno. A veces, algunas aplicaciones funcionan como una base de datos .
Este patrón localiza el componente base de datos de forma separada al
sistema.
5. Base de datos distribuida: Este patrón descomponen la base de datos en
componentes separados los cuales interactuan por medio de interprocesos
que comunican los servicios. Con una base de datos distribuida una
aplicación puede integrar los datos desde diferentes sistemas de base de
datos o los datos pueden ser almacenados en una localización cercana a
donde se están procesando.
Cada uno de los patrones se puede aplicar de forma ortogonal, es decir, no influye el
hecho de aplicar un patrón a la hora de poder aplicar el siguiente. A continuación en la
figura 3 podemos ver como cada patrón de distribución va dividiendo cada una de las
capas.
Modelo 2 Capas
Modelo 3 Capas
Modelo 6 Capas
Presentación
Interfaz de
Usuario
Interfaz de
Usuario
Presentación
Distribuida
Control de Usuario
Interfaz de usuario
remoto
Lógica de
Negocio
Servidor
Núcleo
Aplicación
Distribuido
Base De
Datos
Remota
Control de procesos
Objetos de Negocio
Acceso a Datos
Persistencia
Base de Datos
Distribuidas
Física de Datos
Figura 3. Esquema de aplicación de cada uno de los patrones de distribución sobre las
capas.
Una vez identificados los tipos de capas, cada uno de los cuales aporta un dominio del
problema específico, vamos a definir cuales van a ser los elementos del modelo de
subsistemas.
11
Aparecen como elementos principales:
Subsistema: Elemento de mayor granularidad en el diseño
arquitectónico de una aplicación. Define una agrupación de componentes
desarrollados para dotarle de la funcionalidad necesaria para cumplir con
la tarea propia de una capa lógica. Por ello, vamos a distinguir tantos
tipos de subsistemas como capas identificadas.
o Representación UML: Es un estereotipo de paquete que
corresponde con el tipo de subsistema que estamos definiendo.
Existen tantos tipos como capas y subcapas definidas. Es decir
que definimos 9 tipos.
<<Tipo de subsistema>>
Nombre de subsistema
Figura 4. Representación de un subsistema.
Relación de dependencia: Se establece una relación de dependencia
entre cada uno de los subsistemas que viene marcada por las relaciones
de uso. Utilizamos la dependencia de paquetes de UML.
Por otro lado, en el metamodelo de WebSA, vamos a definir mediante el lenguaje de
restricción OCL [OMG] las posibles relaciones que se establecen entre los diferentes
tipos de subsistemas, e indicar que elementos vamos poder descomponer según el tipo
de distribuciones posibles.
En la siguiente figura se muestra un ejemplo de diagrama de diseño estructural de una
aplicación web de comercio electrónico llamada Telecomercio. Cabe reseñar que cuenta
con dos interfaces de usuario, uno que sería el sitio web que colgaríamos de internet, y
el otro es una herramienta de administración con la cual cargaríamos información sobre
personalización y contenido al sitio web.
12
<<Presentation>>
W eb Site
T elecomercio
<<Presen tation> >
Administrador W eb
Site
<<Dialog Control>>
DC W eb Site
<<Dialog Control>>
DC A dm inis trador
<<Business Logic>>
T elecomercio
<<Persistence>>
BDT elecomercio
Figura 5. Ejemplo de Telecomercio.
Una vez hemos divido del sistema en los subsistemas que lo consituyen el siguiente
paso es adentrarnos en cada uno de ellos, y ver cuales son los componentes que lo
componen. Dichos componentes deben definirse en armonía respecto al esquema
definido a este nivel, ya que las dependencias establecidas entre los diferentes
subsistemas, nos indicarán si los componentes de estos podrán relacionarse o no.
13
3.2
Modelo de Configuración de Componentes la Web
Una vez hemos fijado a través de los requisitos no funcionales cuales van a ser la
distribución en subsistemas que va a tener nuestra aplicación, el siguiente paso consiste
en descomponer cada uno de dichos subsistemas en los componentes que van a
constituir la arquitectura estática de nuestra aplicación.
Básicamente, el modelo de configuración de componentes de web consiste en fijar la
configuración estática de los diferentes subsistemas a través de una colección de
componentes del dominio web abstractos vinculados entre sí a través de diferentes tipos
de relaciones de dependencia. Dentro de dicho diagrama, cada uno de dichos
componentes web abstractos van a estar identificados por un tipo propio del subsistema
en el que está ubicado, y además tendrá asociada una cardinalidad sobre la población de
dicho componente. Por otro lado, las relaciones igualmente vendrán a fijar el tipo y las
cardinalidades entre los diferentes componentes del sistema.
A este nivel de abstracción, vamos a poder identificar otra serie de elementos de
reutilización como son los “patrones de arquitectura” que nos van a permitir relacionar
dicho modelo con los requisitos no funcionales. Como veremos en las fases posteriores,
dichos patrones de arquitectura identificados por autores como [BMR+96] y [Conallen]
serán aplicados a los componentes de las diferentes capas de la aplicación web.
Por otro lado, este modelo podemos considerarlo similar al que propone
[Hassan2001] en su modelo ALS [Architecture Level Schema], pero a diferencia de este
además de expresar la relación existente entre los componentes y los subsistemas, se
intenta fijar el tipo y la cardinalidad de los componentes con lo cual se restringe la
población de los componentes concretos identificados en próximos refinamientos.
Las propiedades principales de dicho diseño modular son:
1. Se define una ontología de elementos localizados en el dominio de las
aplicaciones web.
2. Proporciona un nivel de abstracción que recoge los patrones arquitectónicos
y frameworks, que posibilitan recoger nuevos requisitos de calidad. Eso sí
siempre restringidos a lo especificado en el diseño estructural.
3. Independiente de dominio, que nos aporta la posibilidad de reutilizar dicho
modelo para más de un sistema.
4. Independencia de lenguaje y de plataforma que no nos obliguen a tomar
compromisos tecnológicos en una fase temprana, y de esta manera poder
especificar un abanico más amplio de implementaciones.
5. Definición y formalización de los elementos a través del metamodelo
WebSA en UML, lo que nos proporciona una trazabilidad de los elementos
que aquí se incorporan.
6. Orientado a web, consecuencia del punto anterior, ya que los elementos que
se manejan están definidos para aplicaciones hipermediales.
14
Un componente a este nivel de abstracción va a proporcionarnos una tarea concreta
e identificada como común dentro de la arquitectura de una aplicación web. Para ello a
cada uno de estos componentes vamos a dotarlos de dos propiedades comunes:
1.
Un tipo: Nos va a indicar cual es la tarea a desempeñar dentro de la
arquitectura de la aplicación, y cual es la disposición y relaciones que puede
tener. Este tipo va a estar restringido a una aplicación web y a la capa dentro
del cual se define, con lo cual vamos a conseguir reducir el número de mapeos
posibles a los elementos de diseño concretos. Como veremos en el próximo
modelo, dicho tipo va a marcar el mapeo que se va a realizar con los
elementos de las vistas funcionales de la aplicación web.
2.
Cardinalidad de despliegue: Va a definir cual es el número de elementos
concretos que se van a generar en las posteriores fases de diseño.
3.2.1 Constructores del diseño modular
Vamos a definir cuales van a ser los elementos y las propiedades que dichos
elementos van a tener:
a) Componente Abstracto
Representa una abstracción de uno o más componentes software con una misma
funcionalidad o tarea dentro de una aplicación web. Además, cada componente va a
tener una relación de dependencia con uno o más componentes que estarán
restringidas en función del tipo y del modelo de subsistemas definido en la fase
anterior. Vemos la definición dentro del metamodelo de dicho artefacto.
Class
WebApplicationComponent
Cardi nality : String
type : String
Client Page
Model
Session
...
Figura 6. Definición de los componentes MCC dentro del metamodelo
WSA.
Propiedades: Cada componente va a tener un conjunto de atributos que indican
su función dentro de la arquitectura de la aplicación.
15
a. Tipo: Indica el tipo de tarea que dicho componente software va a representar
en la aplicación web. Un componente dentro del dominio de una aplicación
web podría ser desde una pagina , a un componente de servidor, a un
componente de control, etc.
b. Cardinalidad: Indica cual va a ser el conjunto de componentes software
concretos que se van a generar a partir de este.
c. Interfaz: Representa las operaciones que dicho componente oferta al resto
del sistema para poder ser invocado. Dicho interfaz al estar definido a un
nivel de abstracción más alto que los componentes software concretos, va a
contener únicamente métodos que sean comunes a todos los componentes
generados posteriormente. A dicho interfaz vamos a representarlo mediante
la notación “lollipop” de UML.
Representación UML-> El componente se representa mediante un estereotipo de
clase. Según el tipo que se defina podremos indicar el icono con el cual se
representa, y en último caso representarlo entre llaves como cualquier estereotipo.
<<Tipo de componente>>
Interfaz
Nombre de componente
Cardinalidad
Figura 7. Representación de un componente.
b) Conector Abstracto
Relación de dependencia establecida entre dos componentes del sistema.
Además, dicha relación puede establecerse sobre el componente o sobre su interfaz,
lo que indica un nivel de acoplamiento menor. Esta relación expresa una
dependencia entre los dos componentes, dependencia que va a venir expresada por
el tipo del conector. Además, al igual que los elementos, se va a definir una
cardinalidad de despliegue que va a generar los elementos conectores que cumplan
la condición de despliegue.
Propiedades:
a. Tipo: Indica el tipo de relación establecida entre los dos elementos
arquitectónicos. Cada uno de estos tipos va a indicar si se trata de una
tarea de invocación, construcción (build), si es remota o local (admite
llamadas entre dos nodos diferentes de la arquitectura física), etc.
b. Cardinalidades: Indica cual va a ser el número de relaciones que se
van a establecer entre los componentes relacionados. Puede ser 0-1,
1, *,+.
16
Representación en UML: En este caso cada uno de los tipos va a venir representada
por un estereotipo de la relación de dependencia.
Componente A
Card. A
Card. B
Componente B
<<Tipo dependencia>>
Figura 8.Representación de la relación de dependencia entre 2
componentes.
3.2.2 Clasificación de los tipos de Componentes
Vamos a realizar una clasificación de los diferentes tipos de componentes que
vamos a poder identificar en función del subsistema en el que nos encontremos
dentro del diseño modular. Dichos tipos van a estar definidos dentro del dominio de
las aplicaciones web y más concretamente en cada una de las capas que por si
mismas desempeñan una función diferente.
Para la definición de dichos tipos vamos a definir cual es su relación dentro del
metamodelo de WebSA, y su vinculación la parte funcional de OO-H con el tipo
genérico definido. Sin embargo, existen algunos componentes que son propios de
las aplicaciones web y no están vinculados con la parte funcional, p.e. el
componente Explorador. Para dichos componentes no tienen un mapeo con la parte
funcional pero si formar parte del metamodelo de WebSA.
Para hacer la clasificación de los tipos vamos a indicar cuales de ellos pueden
definirse en cada una de las 10 capas identificadas en el modelo de Subsistemas.
Existen tipos de elementos que por contener funcionalidad perteneciente a más de
una capa solo puedan definirse en una capa compuesta, por ejemplo, un applet
contiene funcionalidad de la capa de presentación y de la de control así que solo
puede definirse en un subsistema de tipo interfaz de usuario.
3.2.2.1 Subsistemas de Interfaz de Usuario
Capa encargada de dotar de la funcionalidad necesaria para la interacción entre
el usuario y la aplicación. En función de la aplicación del patrón de distribución
“Presentación Distribuida” va a estar divida a su vez por dos subcapas: Presentación
y Control de Usuario.
A la hora de elegir cuales son los elementos más adecuados para cada una de las
capas, nos hemos basado en los trabajos como [Conallen] que define un conjunto de
elementos para especificar una aplicación web en UML.
Existen tipos de componentes que se solo se pueden ejecutar cuando presentación y
control no están separados, son los siguientes:
Objeto Web: Componente que es ejecutado en el cliente proporcionando la
funcionalidad tanto de presentación como de control de diálogo. Normalmente
17
se ejecuta en el browser mediante plugins, los ejemplos más típicos son los
Applets Java, los componentes Flash, y los Actives.
A continuación indicamos los elementos que podemos identificar en cada una de las
subcapas, que igualmente pueden utilizarse cuando ambas capas están unidas.
a) Subsistema de Presentación.
Este subsistema cuya principal función es la de mostrar e interactuar con el
usuario de la aplicación. En esta capa va a aparecer los siguientes tipos elementos
(Componente):
Explorador: Cualquier explorador HTML estandar, con soporte o no a plugins
Flash, Java. Capaz de interpretar las páginas de presentación, estilo y funcional,
mostrárselas al usuario. Aparte de esto es capaz de aceptar y de devolver cookies.
Pagina Cliente: Componente que contiene el contenido necesario para presentar la
información al usuario, recibir la entrada de datos, validarlos si es necesario y
además realizar las invocaciones al servidor. (p.e. HTML, XML, página flash).
Puede contener referencias a otros componentes cliente, estilo y funcional.
Pagina Estilo: Componente que únicamente mantiene información referente al
aspecto del interfaz de usuario (p.e. CSS, XSL). Puede ser referenciado por un
componente cliente.
Pagina Funcional : Componente que mantiene funcionalidad para la interacción del
usuario con el interfaz de la aplicación. Dicha funcionalidad puede ser validación,
presentación, navegación, etc. (p.e. Javascript, ActionScript). Puede ser referenciado
por un componente cliente.
Almacén: Componente que mantiene a un mecanismo de almacenamiento
localizado en la capa del cliente, que le va a permitir recuperar información entre
sesiones. El ejemplo más habitual es la cookie.
b) Subsistema de Control de Diálogo
Este subsistema llamado Control de diálogo o capa de presentación se encarga
de realizar el procesamiento de la funcionalidad de presentación, tanto en lo que se
refiere a su navegación, a su presentación, y en las invocaciones que se realicen a la
capa de la lógica. Basándonos en la separación funcional de procesamiento, entrada y
salida que hace el patrón MVC [BMR+96], vamos a incorporar ciertos elementos
comunes dentro de esta capa.
Los principales tipos identificados son:
Página Servidora: Componente que realiza el procesamiento de la pagina web
mediante scripts ejecutados en la parte servidora, normalmente por un engine
que ejecuta el código de la página y le devuelve el contenido al servidor web.
Dicho componente contiene la información referente a la presentación y/o lógica
en el servidor y genera uno o más componentes de la capa de interfaz de usuario.
(p.e. ASP, JSP, PHP, Coldfusion, etc).
18
Control: Componente que se encarga de recibir las peticiones realizadas por el
usuario y establece la reacción del interfaz. La funcionalidad que aporta es la de
redireccionar las peticiones de servicios a la lógica de negocio o al componente
modelo, y la de redireccionar las peticiones de navegación a páginas servidoras.
Representación en Metamodelo:
Para definir la reacción obtendremos la información del modelo de
navegación (NAD). A partir del cual establecemos una relación con la clase
Navigational Link, el la cual control contendrá la funcionalidad de n enlaces. Por
otro lado, tendrá una relación de asociación con la clase Operación OO-H,
definida a partir de la herencia de la clase Operación del UML.
<<W ebApplicat ionComponent>>
WAC1
<<NAD class>>
NAD1
1
target
<<Operation>>
ConceptualC1
1
<<ControlAWD>>
CAWD1
sourc e
0..n
0..1
0..n
0..n
0..1
0..n
<<Navigational Link>>
NV1
<<OperationOOH>>
op1
Figura 9. Metamodelo del componente ControlAWD
Modelo: Componente que representa los datos y la funcionalidad del dominio de
la aplicación en la capa de presentación. Está definido mediante el diagrama de
clases de la vista conceptual.
Vista: Componente obtiene la información del modelo, y muestra la información
al usuario. La forma en que la muestra es independiente del dominio de la
aplicación. Viene definida por el CLD o modelo de presentación.
Sesión: Componente que mantiene la información durante la sesión de un
determinado usuario.
Aplicación: Componente que mantiene la información común para todos los
usuarios.
Cliente: Componente que mantiene la información para un determinado cliente.
Legado: Componente que realiza una invocación a la capa de control o que es
demandado por la capa de control para que haga una determinada tarea.
19
Almacén: Componente que va a mantener información de forma persistente
localizada en la capa de presentación o control. Dicha información accesible
únicamente por los componentes de esta capa almacena información referente a
configuración, idioma, personalización, etc. Un ejemplo puede ser un fichero
properties de java, un xml, etc.
3.2.2.2 Subsistemas de Lógica de Negocio
Esta es la parte del sistema que resuelve las reglas de negocio especificadas para el
dominio del problema. Dicha capa puede estar o no divida por dos subcapas, procesos
de negocio y por los objetos de negocio. Ambas partes aparecen especificadas por la
vista conceptual de sistema, y se van a distribuir en un conjunto de componentes que en
función de los requisitos de calidad van a sugerir la utilización de computación
distribuida, standalone, etc. Los componentes identificados en este subsistema están
basados en abstracciones del estándar EDOC (Enterprise Distributed Object
Computing)[OMG02], esto nos va a permitir posteriormente obtener en el refinamiento
a componentes concretos definidos en el estándar EDOC, para los cuales MDA nos
proporcionará los mapeos a distintas plataformas.
a) Subsistema de Procesamiento de Control
Esta parte del sistema se encarga de atender las peticiones que se reciben del cliente,
convirtiéndolas en procesos que se realizará de forma transaccional o no, de forma
síncrona o asíncrona. Aquí utilizaremos las siguientes combinaciones de componentes:
Sesión Sin Estado: Componente que no mantiene estado de un determinado cliente, es
decir, se crea un hilo de ejecución nuevo por cada invocación que se realice. Lo que le
otorga la posibilidad de generar n hilos muy ligeros y atender a muchos clientes
simultáneamente. Se utiliza cuando el número de usuarios de la aplicación es elevado.
Sesión Con Estado: Componente que mantiene estado de un determinado cliente
durante toda su interacción. Lo que le obliga a establecer una instancia por cada cliente.
Resultando más útil cuando se exigen altas prestaciones, a un número de usuarios no
muy elevado.
Sesión Asíncronos: Componente que recibe invocaciones en modo asíncrono de una
lista de distribución o de una pila de llamadas.
Componente Por Lotes: Componente que realiza un conjunto de eventos no
transaccionales.
Componente Servidor Legado: Componente que realiza su tarea desde un sistema
legado.
Funcional: Componente que contiene una colección de funciones accesibles por el
resto de elementos del subsistema.
b) Subsistema de Objetos de negocio
20
En dicho subsistema residen los elementos que contienen la representación de
los objetos definidos en el dominio del problema. En nuestra aproximación aparecen
definidos en la vista conceptual. Dichos componentes pueden ser de estos tipos:
Entidad Distribuida: Componente que representa una instancia de
una o más clases del modelo. Además, mantiene la información del modelo en memoria
de manera que previo un proceso de carga, se accede a esta información y
posteriormente se actualiza dicha información en la capa de persistencia. Esto permite
reducir el número de accesos a base de datos con la ventaja a nivel de rendimiento que
supone.
Entidad Local: Componente que representa una instancia de una o
más clases del modelo, pero que necesita acceder a la persistencia para realizar
cualquier operación. Es utilizada cuando no es necesario optimizar los accesos a BD.
CAD (Componente de Acceso a Datos): Componente cuya funcionalidad es la de
acceder a los datos independizando a las componentes del dominio del tipo
de persistencia que el sistema utiliza. Está basado en el patrón de diseño DAO de
Gamma.
Funcional: Componente que contiene una colección de funciones
accesibles por el resto de elementos del subsistema.
Legado: Representa una instancia del modelo o de otro sistema que es mantenida por
un sistema legado.
3.2.2.3 Subsistemas de Persistencia
Parte del sistema encargada del dotarle de persistencia al sistema de
información. Dada la división marcada por la aplicación del patrón Base de Datos
Remota, los componentes en cada una de las subcapas van a estar enfocados por un lado
al acceso y por el otro a la gestión de dichos datos.
a) Subsistema de acceso a datos.
Este subsistema se encarga de contener aquellos elementos que permiten el
acceso a los datos físicos desde la capa de lógica de negocio. Además provee de la
funcionalidad necesaria para poder otorgar una serie de mejoras de rendimiento y
escalabilidad como son la utilización de un pool de conexiones o la de disponer de bases
de datos remotas.
Pool: Componente que consiste en una colección de recursos que nos permiten
reutilizar dichos recursos para un conjunto de usuarios elevados, y además reducir
drásticamente el tiempo necesario para crear y destruir cada conexión física.
Fuente de Datos: Componente que nos proporciona la conexión lógica con la fuente
de datos. Va a mantener una serie de propiedades como son la posibilidad de admitir
transacciones, el usuario y password, etc.
21
CAD (Componente Acceso Datos): Componente que nos proporciona la posibilidad de
realizar una conexión física con la fuente de datos. Dicho puente puede admitir
conexiones remotas (TCP/IP...), ser estandar (JDBC,ODBC....), admitir BDOO o BDR
o Legacy.
b) Subsistema físico de Datos
Este subsistema determina cuales van a ser las fuentes físicas de datos que va a
contener nuestro sistema. Dichas fuentes son de diversa naturaleza, y pueden estar
distribuidas de forma local o remota dependiendo del tipo de puente utilizado. Los
elementos que nos podemos encontrar son los siguientes:
Almacen: Gestor donde almacenamos la información de nuestro sistema de
información. Puede ser de diferentes tipos:
Relacional: Base de Datos Relacional, compuesta por un conjunto de tablas
relacionadas y mediante un lenguaje de consulta SQL que nos facilita el acceso a
los datos.
Orientado Objetos: Base de Datos Orientada a Objetos, más sofisticada que la
relacional puesto que no solo permite el tratamiento de los datos, sino que
proporcionan un lenguaje propietario que posibilita la definición de lógica de
negocio a este nivel.
Ficheros Planos: Base de datos que gestiona ficheros fisicos, ya sea con un
formato propio o estándar (XML).
Legada: Sistema legado que nos proporciona datos de un sistema existente y sobre el
cual vamos a acceder para el funcionamiento del sistema.
Funcional: Funciones localizadas a un nivel dependiente del gestor de base de datos,
pueden tratarse tanto de procedimientos almacenados en el lenguaje del propio gestor o
en XML.
3.2.3 Definición de los tipos de conectores
Existen diferentes 3 tipos de conectores cada uno de los cuales indica una relación
diferente entre componentes o módulos:
Invocación Remota: Llamada que realiza un componente a otro elemento del diagrama
de forma remota, es decir, soporta una distribución en nodos físicos diferentes
(HTTP,TCP/IP,SMTP).
Invocación Remota Segura: Llamada que realiza un componente a otro elemento del
diagrama de forma remota y además utilizando un protocolo seguro (p.e. HTTPS,
IMAP/SSL, SMTP/SSL, etc.)
Invocación local: Llamada que realiza un componente a otro elemento del diagrama de
forma local, es decir, dichos elementos han de residir en el mismo subsistema.
22
Construir (build):Identifica que componente página servidora es responsable de la
creación de uno o más componentes página cliente, o funcional o estilo. Es una relación
direccional puesto que solo los componentes página servidora tiene conocimiento de los
componentes cliente y no al contrario.
Contiene (Include):Relación que se establece entre dos componentes en el que el
primer componente contiene al segundo. Relación definida por [Conallen99] para
vincular una página template con las páginas que referencia.
3.2.4 Ejemplo Diagrama del Modelo de Composición de Componentes Web
Una vez hemos definido cuales son los elementos que componen el diseño
modular, a continuación vamos a mostrar un ejemplo de un diagrama utilizando la
notación UML que hemos proporcionado para cada elemento.
<<Presentation>>
P1
<<Browser>> 1..1
0..n
B1
<<remote>>
<<Cl ient PageWD>>
PC1
<<Functional Page>>
FP1
1..n
1..n <<rem ote>>
1..n
1.. 1 <<Style Page>>
<<rem ote>>
SP1
1..*
1..1
<<rem ote>>
<<build>>
<<Dialog Control>>
D1
1
<<ControlWD>>
CWD1
<<SessionWD>>
S1
1..1
1..1
1..1
<<Server PageWD>>
SWD1
<<local>>
1.. n
<<local>>
1..n
<<Model>> 1..n
1..n <<ViewWD>>
M1
VWD1
<<local>>
1..n
<<local>>
1..n
1..n
<<Business Logic>>
BL1
<<rem ote>>
1..n
<<Session S tatel ess>>
SS1
0..n
0..*
0..*
<<Distributed Entity>>
E1
0..1
<<BLFunc tional >>
BLF1
<<local>>
<<local>>
<<local>>
0..n
0.. n
<<DAC>>
DAC2
<<DAC>>
DAC1
1..n
<<remote>> 1..n
<<Persistence>>
Pers1
<<rem ote>>
1..1
<<Pool>> 1..1 1..1
1..n <<DataSource>>
Pool1
DS1
<<local>>
1..n
1..1
<<Relational DB>>
DB1
<<remote>>
Figura 10. Modelo de Composición de componentes de la aplicación de Telecomercio.
23
3.3 Diagrama de Integración de Componentes
Una vez hemos identificado en los modelos anteriores la arquitectura de la
aplicación, se hace necesario vincular la parte no funcional recogida a través de los
diagramas de arquitectura anteriores con la parte funcional de la aplicación, recogida a
través de los diagramas de procedentes de las fases de análisis. Existen aproximaciones
que defienden la idoneidad de esta aproximación pues postulan que es la única manera
en la cual se puede recoger todos los requisitos que una aplicación exige.
Entre los componentes definidos en el DDC pertenecientes al dominio de las
aplicaciones web, existen algunos que tienen una vinculación estrecha con la parte
funcional, el caso más claro es el caso componente “modelo” de la parte de control de
usuario, dicho componente contiene la funcionalidad de una o más clases, las cuales
están expresadas en el modelo conceptual y de proceso de la aplicación en la parte del
cliente.
Esta vinculación de los componentes nos va a proporcionar un mapeo por defecto
que dará como resultado un modelo sin refinar de la integración de la arquitectura y
funcionalidad expresada hasta este momento. Sin embargo, en muchas ocasiones esto
no es suficiente, como hemos comentado anteriormente, existen requisitos que
solamente podemos recogerlos cuando involucramos tanto a la arquitectura como a la
funcionalidad. Por ejemplo, poder definir la granularidad de los componentes que se
encuentran en la capa de la lógica de negocio, es decir, cual va a ser la funcionalidad
que va a contener dichos componentes. Dicha propiedad va a influir enormemente en el
rendimiento de la aplicación, y solo lo podríamos fijar correctamente si integramos
ambas partes.
En resumen, el diagrama de integración presenta las siguientes propiedades:
1. Recoge requisitos que implican tanto aspectos funcionales como no funcionales.
2. Es dependiente de aplicación, ya que representa los componentes del dominio de
las aplicaciones web para una aplicación en concreto.
3. Es independiente de plataforma de manera que dicho modelo puede servir para
generar código sobre diversas implementaciones. Es según la especificación
MDA un modelo PIM (Platform-Independent-Model).
4. Reduce drásticamente el tiempo de modelado ya que se nos proporciona un
modelo por defecto gracias al mapping que nosotros debemos refinar.
5. Respecta las restricciones establecidas por los modelos de arquitectura
abstractos.
3.3.1 Constructores
En este diagrama nos vamos a encontrar con los siguientes constructores:
a) Componente Concreto (CCAW)
Unidad más pequeña dentro del modelo de integración, y representa a un
componente software dentro del dominio una aplicación web. Es la instanciación de un
componente abstracto del tipo definido en el modelo de composición de componentes y
recoge la funcionalidad completa que dicho componente aportará al sistema. Se
encuentra al mismo nivel de abstracción que un componente del perfil EDOC.
24
A diferencia de los componentes abstractos definidos en el modelo MCC donde los
componentes de diferentes tipos únicamente realizaban tareas identificadas como
comunes en el dominio de las aplicaciones web, un componente de este nivel contiene
toda la funcionalidad del componente software.
Además presenta la característica fundamental de ser independiente de dispositivo,
es decir, soporta n implementaciones, tantas como plataformas sean capaces de
reproducir su funcionalidad, lo que nos otorga un mayor nivel de reutilización, y por
otro lado, dota de mayor portabilidad a un sistema.
Propiedades:
a) Tipo: Al igual que en nivel abstracto dicho tipo sigue representando la tarea que
dicho componente software realiza en la aplicación web. Un componente dentro
del dominio de una aplicación web podría ser desde una pagina, a un
componente de servidor, a un componente de control, etc.
b) Servicios: Son aquellas operaciones ofertadas por el componente definidos por
el tipo del componente y por el dominio de la aplicación. Dichos servicios son
obtenidos a través del mapeo con la parte funcional del sistema.
c) Interfaz: Representa un subconjunto de los servicios públicos definidos por el
componente dentro del dominio de la aplicación, que dicho componente oferta al
resto del sistema para poder ser invocados. Se reduce así el nivel de dependencia
entre un componente y otro cuando la relación se establece a través de su
interfaz y no del mismo componente. A dicho interfaz vamos a representarlo
mediante la notación “lollipop” de UML.
Representación UML: El componente concreto de aplicación web se representa
también como un estereotipo de la clase UML. Dicha clase va a contener un conjunto de
servicios que va a ofertar el componente, dichos servicios va a ser operaciones de la
clase que van a poder ser invocadas desde otros componentes.
Un ejemplo del componente carrito de nuestra aplicación de telecomercio:
<<MODEL>>
CARRITO
Interfaz
S1. AñadirItem (articulo)
S2. BorrarItem (articulo)
S3. MostrarTodosItems
Figura 11. Ejemplo del componente concreto del tipo Model.
25
b)Módulo (MAW):
Es el conjunto de uno o más elementos concretos del mismo tipo dentro de una
aplicación web, dichos elementos son módulos, componentes y conectores. Su
funcionalidad es la de agrupar la funcionalidad de un conjunto de elementos reduciendo
así la complejidad de modelado.
Se genera a partir del proceso de refinamiento de un componente abstracto cuya
cardinalidad es mayor que 1, que al realizarse la integración da lugar a un conjunto de
componentes del mismo tipo, los cuales serán contenidos por dicho módulo.
Representación UML: Se especifica mediante un estereotipo de paquete UML llamado
<<ModuleMIC>>, de manera que es modulo puede ser utilizado para contener
componentes de cualquier tipo definido.
c) Conector Concreto (CCWA)
Relación establecida entre dos componentes o módulos concretos del sistema. Es la
instanciación de una relación de dependencia definida en el modelo abstracto de
arquitectura. Influyendo en el mapeo la cardinalidad definida en el conector abstracto y
las relaciones establecidas en el metamodelo entre los tipos de los componentes
abstractos y la parte funcional, obteniendo así un conector perteneciente al del dominio
de la aplicación.
Por último indicar que dicha relación cuando representa una invocación, se establece
con un determinado servicio público del componente destino, ya sea sobre el mismo
componente o sobre su interfaz lo que indicaría un nivel de acoplamiento menor.
Propiedades:
c. Tipo: Indica el tipo de relación establecida entre los dos componentes o
módulos concretos. Cada uno de estos tipos va a indicar si se trata de una
tarea de invocación, construcción (build), si es remota o local (admite
llamadas entre dos nodos diferentes de la arquitectura física), etc.
d. Servicio: En aquellas relaciones del tipo invocación local o remota que
representan invocaciones de uno a otro componente dicho conector
puede identificar el servicio que invoca en el componente destino.
Representación en UML: En este caso cada uno de los tipos va a venir representada
por un estereotipo de la relación de dependencia.
26
3.3.2 Mapeo por defecto del modelo Abstracto de Componentes al modelo
Concreto de Componentes.
Derivado de las relaciones de dependencia establecidas en el metamodelo entre los
componentes abstractos del dominio de las aplicaciones web con los elementos de la
parte funcional definidos en OO-H, viene representado en la figura 2. Vamos a obtener
un mapeo por defecto, basándonos en aproximación que propone MDA, en el cual
vamos a indicar cuales son los elementos concretos que obtendríamos de forma
automática sin hacer ningún tipo de refinamiento.
Dicha propuesta viene definida además por un conjunto de reglas de transformación que
van a proponer un mapeo de la funcionalidad dentro del componente, dichas reglas de
transformación van a intentar basarse en patrones de arquitectura de cada una de las
capas, y de esta manera puede servir como punto de referencia para personas poco
expertas en el diseño de aplicaciones web.
Esta propuesta por defecto nos va ayudar fundamentalmente a acelerar el proceso de
modelado del software, de manera que nos concentraremos fundamentalmente en
recoger aquellos requisitos que se localizan en esta capa y que implican que las partes
funcional y no funcional del sistema estén integradas.
Vista Funcional
Modelo
Subsistemas
Modelo
Proceso
Modelo NAD
Modelo
Conceptual
Modelo MCC
Modelo
Presentación
Modelo Integracion
de Componentes
Figura 12. Modelo dependencia entre los diferentes modelos.
Una de las características claves de MDA es la noción de mapeo. Un mapeo es un
conjunto de reglas y técnicas usadas para modificar un modelo de manera que
obtengamos otro modelo. Uno de los mapeo definidos en MDA son los usados para
transformar, PIM a PIM, es decir cuando dos modelos independientes de plataforma se
encuentran en diferentes niveles de abstracción, y el segundo es mejorado, filtrado o
especializado durante el ciclo de vida del desarrollo del software. Este es el caso de
27
nuestro mapeo en el cual estamos mapeando entre varios modelos los cuales se
encuentran en diferentes niveles de abstracción y uno deriva de los otros.
3.3.3 Proceso del Mapeo
Partiendo del modelo abstracto de componentes web, vamos a analizar cada uno los
componentes, que tienen una relación con la parte funcional del sistema, p.e. pagina
cliente, control, y expresar cual sería su mapeo dentro del modelo concreto de
componentes web.
Siguiendo el ejemplo del modelo de Telecomercio, vamos a tomar el componente
Control para ver como sería su refinamiento por defecto. Si considerábamos que dicho
componente control tiene una cardinalidad de 1 dentro del modelo, eso quiere decir que
va a convertirse en un componente concreto directamente.
El diagrama de refinamiento sería el siguiente:
<<Navigational Link>>
NewClass4
<<OperationOOH>>
NewClass 2
0..n
0..n
0..1
<<ControlAWD>>
Control1
0..n
0..1
<<refine>>
{derived}
0..1
<<ControlCWD>>
Control2
0..n
{derived}
0.. 1
Figura 13. Ejemplo de refinamiento del Componente Concreto Control.
Para este componente definimos las siguientes reglas de transformación:
1. Para las operaciones OO-H defino un servicio en el componente CWD llamado
recibirPeticionServicio.
2. Para los link navegacionales defino un servicio en el componente CWD llamado
recibirPeticionNavegacion.
3. Para cada operación realizo una llamada local al componente modelo (si existe)
o sesion o entitad. De forma que establezco la prioridad en este orden.
4. Para cada link navegacional realizar una llamada a una página servidora o
cliente que sea el destino navegacional.
En nuestro caso de ejemplo de Telecomercio, vamos a ver como se mapean del modelo
abstracto de componentes al modelo de integración de componentes, la capa de control
de diálogo. En la figura XXX, vemos como siguiendo las reglas de mapeo vamos a
obtener los diferentes elementos:
28
<<ControlACW>>
CWD1 {card=1}
<<Dialog Cont rol>>
D1
1..1
<<local>>
1..1
<<WebSessionACW>>
S1 {card=1}
<<local>>
0..1
1..n
0..n
<<local>>
<<ModelA CW>>
1.. n
M1 {card=*}
1..n
<<Server PageACW>>
SWD1 {card=*}
<<local>>
1..n
1..1
1..n
<<local>>
1..n
<<local>>
1..n
<<ViewACW >>
VWD1 {card =1}
<<Dialog Cont rol>>
<<ControlCCW>>
CCW 1
<<local>>
recibirPeticionServicio()
recibirPeticionNavegacion()
<<W ebS essionCCW>>
S11
Server Page Module
WebSite
<<local>>
AnyadirObjeto()
BorrarObjeto()
ObtenerObjeto()
<<local>>
<<local>>
<<local>>
<<ModuleMIC>>
ModuleM odel1
<<ViewCCW>>
VCCW1
Figura 14. Mapeo entre el MDC y el MIC.
Como vemos cuando realizamos el mapeo, las cardinalidades de los componentes
concretos se pierden ajustándose a la funcionalidad, y en el caso de que se presenten
más de un componente del mismo tipo, dichos componentes se reúnen en un modulo de
dicho tipo.
Viendo con más detalle el mapeo realizado en dicha capa, vamos a ver el contenido del
modulo de componentes Model figura 13, esterotipado con el nombre
<<ModuleMIC>>, indicando que se trata de un módulo del diagrama de integración de
componentes. Como vemos establecen las relaciones entre cada uno de los componentes
que integran el paquete Model, y con los componentes de los demás paquetes con los
cuales se ha establecido igualmente una relación de dependencia.
29
<<ControlCCW>>
CCW 1
(from Logical Vie w)
recibirPeticionServicio()
recibirPeticionNavegacion()
<<local>>
validarCliente
Nuevo Carrito
<<local>>
<<local>>
<<ModelWeb>>
Cliente
CrearCliente()
BorrarClient e()
ValidarCliente()
Obt enerCliente()
GenerarPedido
<<ModelWeb>>
Carrito
Nuevo Carrito()
AnyadirItem()
BorrarItem()
MostrarTodosItems()
GenerarPedido()
<<local>>
CrearPedido
<<ModelWeb>>
Pedido
CrearPedido()
Anyadir Objeto
<<WebSessionCCW>>
S11
(from Logical Vie w)
AnyadirObjeto()
BorrarObjeto()
ObtenerObjeto()
Figura 15. Contenido del modulo Model del modelo MIC.
3.3.4 Proceso de refinamiento
El proceso de mapeo automático nos a generado un modelo que en algunos casos
podríamos considerar válido, pero en otras ocasiones puede resultarnos insatisfactorio.
Por ejemplo, el hecho de que generemos en el mapeo por defecto en un componente
entidad una operación por cada operación OO-H definida en la clase conceptual, puede
ser poco recomendable en aquellos casos donde se trate de un alto número de servicios
y obtuviéramos así un componente demasiado pesado que afectara al rendimiento del
sistema.
Se hace necesario en la mayoría de los casos un proceso de refinamiento en el cual se
capturen aquellos requisitos de usuario que no hemos podido recoger en fases
anteriores.
Los procedimientos más típicos de refinamiento que podremos realizar con este modelo
son los siguientes:
1. Integración de funcionalidad en componentes: Integramos la funcionalidad
que estaba repartida en 2 o más componentes, en un solo componente
reduciendo así el número de invocaciones entre componentes.
2. División de funcionalidad de componentes: Dividimos la funcionalidad
localizada en un solo componente y la repartimos en 2 o más componentes.
3. Cambios de invocación de componentes: Puede venir consecuencia de otros
cambios de refinamiento, o puede derivarse de un cambio de la arquitectura en
algunos casos particulares del dominio del problema. Por ejemplo, si queremos
30
que para la clase carrito, el componente model en lugar de llamar a la lógica de
negocio, resuelva la operación en la capa de control de diálogo.
4. Supresión de componentes: Queremos que un componente concreto no nos
parezca adecuado para nuestra arquitectura ya sea porque no es necesario, p.e. el
componente entidad de carrito, o porque se deriva de un cambio de integración.
5. Creación de nuevos componentes concretos: Queremos crear un componente
ya sea porque necesitamos aumentar la funcionalidad o porque simplemente se
deriva de un cambio de división.
31
5. Referencias
[Bass97] Bass, Clements, and Kazman. Software Architecture in Practice, AddisonWesley 1997.
[Bass00] Bass, L., Klein, M., Bachmann, F. “Quality Attribute Design Primitives”
CMU/SEI-2000-TN-017, Carnegie Mellon, Pittsburgh, December, 2000
[Bell98] Bell R.(1998) “Code Generation from Object Models”. Embedded
Programming Systems Journal, March, 1998.
[BMR+96] Frank Buschman, Regine Meunier, Hans Rohnert, Peter Sommerlad,
Michael Stal: Pattern-Oriented Software Architecture – A System of Patterns; John
Wiley & Sons Ltd. Chichester, England, 1996
[Booch01] Grady Booch: The Architecture of Web Applications. DeveloperWorks:
IBM developer solutions. June 2001.
[Coglianese92] L. Coglianese, W. Tracz: Architecture-Based Development Process
Guidelines for Avionics Software, Technical Report ADAGE-IBM-92-02, IBM Federal
Systems Company, Dec. 1992.
[Conallen99] Jim Conallen. Building Web Applications with UML. Adisón Wesley
Longman. December 1999.
[Dun90] R. H. Dunn: Software Quality - Concepts and Plans, Prentice-Hall, 1990.
[Hassan02] Admed E Hassan, R.C. Holt. Architecture Recovery of Web Applications.
ICSE’02, May 2002.
[Hoffmann96] Christoph Hofmann, Eckart Horn, Wolfgang Keller, Klaus Renzel,
Monika Schmidt. The field of software architecture. November 96.
[Hofmeister99] C. Hofmeister, R. L. Nord, D. Soni. Siemens Corporate Research,
Princeton, New Jersey, USA.. 1999
[Kruchten95] Kruchten, P. (1995) The 4+1 View Model of Architecture, IEEE
Software.
[OMG01] Model-Driven Architecture (MDA) Home Page:
http://www.omg.org/mda/index.htm
[OMG02] UML Profile for Enterprise Distributed Object Computing Specification.
Febrary 2002.
[Nilson94] Nilson, Roslyn; Kogut, Paul; & Jackelen, George Component Provider's and
Tool Developer's Handbook Central Archive for Reusable Defense Software (CARDS).
STARS Informal Technical Report STARS-VC-B017/001/00. Unisys Corporation ,
March 1994.
32
[NoSc99] J. Noack, B. Schienmann: Introducing Object Technology in a Large Banking
Organization, IEEE Software, May 1999, 71-81
[Schwabe99] Schwabe, D., Almeida, R., & Moura, I. 1999a. Leveraging Templatebased Website Implementations Using Design Methods. In: 8th International World
Wide Web Conference.
[UML 2003] UML 1.5 Standard, OMG (2003). www.omg.org
33
Descargar