Material didáctico e implementación del ejemplo
D. Configuración del generador de código
10. El usuario debe poder escribir una opinión acerca de sus libros favoritos Las opiniones (review comments) aparecerán junto con
5.2 Aplicando MDD
Identificaremos las partes del proceso de desarrollo de software que tienen especial significado dentro del framework MDD. Para comenzar debemos identificar el modelo PIM de nuestro sistema y luego debe- mos identificar cuáles son los modelos PSM y el código que se espera como resultado del proceso de desarrollo. También es necesario que definamos cuáles son las transformaciones que usaremos para gene- rar el PSM y el código a partir del modelo PIM. Todos estos elementos del framework MDD que aparecerán en nuestro ejemplo son mostra- dos en la figura 5-1. Los modelos se muestran mediante rectángulos y las transformaciones mediante flechas.
Entonces, necesitamos construir un sistema basado en la web que sa- tisfaga los requisitos planteados. Para este ejemplo, implementaremos el sistema Bookstore usando Java, y aplicaremos el framework Spring, que es un contenedor liviano de J2EE que se ha tornado muy popular. Más específicamente, usaremos una parte del Framework llamada Spring Web MVC. Como su nombre lo sugiere, esta parte de Spring nos permi- te crear aplicaciones web usando una arquitectura Model-View-Controller (MVC). Para nuestro front-end (la parte “View” del MVC), usaremos JavaServer Pages (JSP). Para el almacenamiento de datos (back-end) conectado a nuestro modelo, usaremos iBATIS. iBATIS está constituido por dos frameworks independientes que generalmente se usan juntos: DAO y sqlMaps. El primero simplifica la implementación del patrón de diseño Data Access Object (DAO) y el segundo simplifica la persistencia de objetos en bases de datos relacionales permitiendo asociar objetos del modelo con sentencias SQL o procedimientos almacenados mediante ficheros descriptores XML. Dado que este desarrollo tiene fines didácticos, usaremos HSQL para la base de datos. HSQL es una base de datos personal, que no resulta adecuada para aplicaciones web multiusuario de gran escala, pero que ciertamente es apropiada para el desarrollo rápido y sencillo de prototipos.
Figura 5-1. Modelos y transformaciones para el sistema de venta de libros.
5.2.1 El PIM y el PSM
El primer paso en el proceso MDD consiste en la construcción de un modelo independiente de la plataforma (PIM) que describa (represente o modele) al sistema de venta de libros. Hemos elegido el lenguaje UML extendido mediante perfiles para expresar nuestro PIM. Se aplicaron los siguientes perfiles: MVC, Model, View y Session. En la figura 5-2 puede verse la definición de cada uno de ellos.
Este modelo PIM puede construirse completamente “a mano” o bien puede derivarse parcialmente desde los requisitos mostrados en la sección ante- rior. Luego, los modelos PSM y el código son generados automáticamente a partir del PIM. La construcción del modelo PIM inicial es la etapa más “artesanal” del proceso MDD. Si bien existen ciertas heurísticas, tal como las propuestas presentadas en [Larman 04] [KG 06] y [RS 07], la automatización del proceso de creación del PIM es un tema que aún está siendo activamente investigado y no existen herramientas de soporte ade- cuadas disponibles para su uso.
Dado que hemos decidido adoptar una arquitectura de capas y dado que cada una de estas capas requiere una tecnología diferente, necesitaremos un modelo PSM conformado por distintos sub-modelos, uno para cada capa. - El primer PSM especifica la base de datos relacional, y lo descri-
biremos usando un modelo relacional.
- El PSM de la siguiente capa representa a los objetos del dominio y a los mecanismos para acceder a los datos. En este PSM esta- rán presentes conceptos propios de los framework Spring e iBATIS, en particular los conceptos de DAO y sqlMaps. Para crear este PSM nos resulta suficiente utilizar al lenguaje UML con algunos estereotipos.
- El PSM para los controladores muestra el comportamiento del sis- tema ante los estímulos externos. Aquí aparecen conceptos pro- pios del framework tales como DispatcherServlet, ModelAndView. También usaremos UML con estereotipos para crear este modelo. - Finalmente, el PSM para la vista Web no usaremos una exten-
sión de UML sino el metamodelo para JSP.
5.2.2 La transformación de PIM a PSM
El PSM tiene una arquitectura Model-View-Controller de tres capas, por lo tanto definiremos transformaciones separadas desde el PIM a cada parte del PSM.
Una transformación de PIM a la capa Model del MVC. La capa model a su vez está estructurada en distintos niveles, ya que dis- tingue a los objetos del dominio en sí mismos (POJOs), a los mecanismos de acceso a los datos (DAOs) y a los mecanismos de persistencia de los datos (base de datos). Definiremos enton- ces dos transformaciones, una transformación que toma como entrada un modelo escrito en UML y produce modelos escritos en términos de un modelo relacional y otra transformación que toma el PIM y genera POJOs y DAOs.
Una transformación de PIM a la capa Vew del MVC. Esta trans- formación toma como entrada un modelo escrito en UML y produ- ce un modelo escrito en términos del modelo de JSP.
Una transformación de PIM a la capa Controller del MVC. Esta transformación toma como entrada un modelo escrito en UML y produce un modelo escrito en una extensión de UML específico del framework Spring que describe las reacciones del sistema a los estímulos externos.
5.2.3 La transformación de PSM a Código
El siguiente paso consistirá en generar código ejecutable para cada PSM. Dado que en el framework MDD el código también es considerado un mo- delo, podemos hablar de modelos de código escritos en algún lenguaje de programación. Para el sistema de venta de libros por Internet tenemos va- rios modelos de código, escritos en HSQL, XML, Java y JSP. Por lo tanto necesitamos escribir al menos tres transformaciones de PSM a código:
Una transformación de modelos relacionales a HSQL: una trans- formación que toma como entrada un modelo relacional y produ- ce el script necesario para crear las tablas en HSQL.
Una transformación de modelos Java a código Java: una trans- formación que toma como entrada un modelo escrito en UML con estereotipos para Java y produce un modelo escrito en Java. Una transformación de modelos Web a código JSP: una transfor- mación que toma como entrada un modelo escrito en términos del modelo JSP para la web y produce un modelo escrito en JSP.
5.2.4 Tres niveles de abstracción
Todos los modelos en ese ejemplo describen al mismo sistema, pero desde diferentes niveles de abstracción.
En el nivel de abstracción más alto encontramos al PIM. Este modelo define los conceptos sin incluir ningún detalle específico de la tecnología que se usará para implementar el sistema. En el siguiente nivel de abstracción encontramos a los PSMs. Estos modelos, si bien son específicos de sus respectivas plata- formas tecnológicas, se abstraen de los detalles concernientes al código ejecutable.
En el nivel de abstracción más bajo están los modelos de código. Estos modelos son específicos de la plataforma e incluyen todos los detalles tecnológicos necesarios para ejecutarse.
La figura 5-1 muestra los diferentes modelos ubicados en los tres nive- les de abstracción y las transformaciones entre ellos. Nótese que las tres capas de la arquitectura del sistema y los tres niveles de abstrac- ción son ortogonales. Los niveles de abstracción se muestran de arriba hacia abajo, mientras que las capas arquitecturales se muestran de de- recha a izquierda.
En la siguiente sección describiremos el modelo PIM. Luego nos ocupa- remos de definir las transformaciones y las tecnologías necesarias para generar los PSMs y finalmente llegar al código.