generación de código sobre plataformas específicas de desarrollo de aplicaciones con moskitt
TRANSCRIPT
Generación de código sobre plataformas específicas de Generación de código sobre plataformas específicas de desarrollo de aplicaciones: gvHidra y gvNixdesarrollo de aplicaciones: gvHidra y gvNix
Jose Manuel García Valladolid
Héctor Iturria Sánchez
Generación de código
● Qué es● Proceso por el cual se generan
modelos o recursos específicos de la plataforma (PSM) a partir de modelos independientes de ella (PIM).
● Beneficios● Desarrollo más rápido.
● Estandarización del proceso de desarrollo.
● Determinación precisa del impacto frente a cambios.
● Mejora en la calidad del producto final.
Generación de código en MOSKitt
● Qué es● Conjunto de transformaciones M2M y M2T a partir de
modelos PIM que generan artefactos específicos de la plataforma de desarrollo.
● Qué nos permite● Generar prototipos que sirven de apoyo a las fases de
análisis y/o diseño.● Generar artefactos que servirán de base para la fase de
implementación de la aplicación.
Plataformas de desarrollo: MVC
● Patrón arquitectónico MVC● Modelo
– Encapsula datos y funcionalidad de la aplicación.
– Proveen interfaces para acceso a consultas y procesos de negocio.
● Vista– Visualización de datos de la aplicación.
– Procesa las peticiones del modelo.
● Controlador– Define el comportamiento de la
aplicación frente a estímulos del usuario.
– Selecciona la vista adecuada en cada momento.
Modelos y arquitectura
Mapa de generación de código en MOSKitt
Plataformas soportadas por MOSKitt
gvHIDRA (PHP5)
● Generación de prototipo de UI
● Generación de código de aplicación para UI
● Generación de objetos y permisos para la base de datos.
gvNIX (Java JEE)
● Generación de entidades Java (POJO's)
● Generación de Persistencia (Anotaciones JPA)
Código generado por UML2JPA
Estrategias para respectar código del programador: Zonas protegidasSon generadas y “vigiladas” por la transformación de MOSKitt.
Se generarán en:
(a) Al final de cada clase Java: permiten al programador añadir nuevas propiedades y métodos a la clase.
(b) En el cuerpo de cada método java que corresponda con una operación de negocio: permiten al programador especificar el código del método.
Código generado por UML2JPA
Estrategias para respectar código del programador: AOP
Inyección de código con AOP (Orientación a Aspectos). Este mecanismo es proporcionado por gvNIX (Spring Roo).
Generación de una aplicación gvHidra
Dos posibles productos:● Prototipo
– Vista previa de la aplicación– No necesita una fuente de datos asociada
● Aplicación– Preparado para modificaciones manuales en caso de ser
necesarias– Soporte para persistencia de datos
Persistencia de los datos
Transformación UML2DB
A partir del modelo de dominio se genera el modelo de base de datos con la estructura que da soporte a la aplicación.
La transformación se puede configurar para personalizar la información que no se puede expresar en el primer modelo.
Transformación UML2DB
Transformación DB2DDL
A partir del modelo de base de datos se obtiene el script ddl que permitirá crear, para el sistema de base de datos elegido, la estructura de tablas necesaria para persistir la información.
Generación para MySql, PostgreSql y Oracle.
Transformación DB2DDL
CREATE TABLE Model_Schema.Pelicula(PK_Pelicula integer,titulo char(50),fecha_estreno date,en_cine boolean,dni_director integer,pais integer,genero integer,productora integer) ;
CREATE SEQUENCE PK_Pelicula
NO MINVALUENO MAXVALUE
NO CYCLE
OWNED BY Pelicula.PK_Pelicula;ALTER TABLE Pelicula ALTER COLUMN PK_Pelicula SET DEFAULT nextval('SEQ_Pelicula_PK_Pelicula');
ALTER TABLE Model_Schema.Pelicula ADD CONSTRAINT PK_Pelicula PRIMARY KEY (PK_Pelicula);
Generación de la interfaz
Generación de la interfaz
Transformación Sketcher2gvHidra
● Diseño de la interfaz de la aplicación a partir del Sketcher.● Se construyen las pantallas a partir de los patrones
proporcionados.● Generación de las plantillas:
– Creación de la estructura y elementos de agrupación– Generación de los controles
● Tipos de datos de los campos:
– Se aplican las máscaras para tipos numéricos y fechas
– Definición de listas y valores booleanos
Transformación Sketcher2gvHidra
CWSolapa CWFicha CWBotonTooltip
CWBotonCWCheckBox CWCampoTexto
CWPestanya
Generación del framework
Transformación Uim2gvHidra
● En este caso particular, se utilizan modelos UIM para especificar, a partir de los patrones, los diferentes módulos de la aplicación y sus componentes.
● Se obtiene el conjunto de controladores, mappings, vistas, así como la configuración y la conexión a la base de datos.
● Suficiente para obtener tanto un prototipo como una aplicación.
Entonces, ¿qué debo hacer? (I)
● A partir del Sketcher es posible obtener un prototipo completo, ya que MOSKitt permite encapsular todo el proceso de generación en una única transformación.
● Dicho mecanismo proporciona también un asistente de generación selectiva: Sólo lo que interesa.
¡Prototipado en un paso!
Entonces, ¿qué debo hacer? (II)
● Para resultados más complejos se puede modificar el modelo UIM creado para añadir nuevas funcionalidades:● Infraestructura de generación de informes● Saltos de pantalla● Acciones de interfaz
● La configuración de la transformación Uim2gvHidra permite especificar información que no está disponible en el Sketcher.
● A través del UIM se añaden los requisitos mínimos que necesita la generación de una aplicación con persistencia de datos.
Configuración de la transformación
Preservación de código
● El código generado es susceptible a ser modificado tras su generación.
● Los cambios efectuados no deben perderse si los modelos se regeneran.
● Solución en dos fases:● Herencia de clases en los controladores:
– Constructor y matchings– Definición de tipos de datos– Métodos de lógica de negocio
● Uso de zonas protegidas para la lógica de negocio
Construyendo un prototipo
DEMO
Generación de código a gvNIX
Disponible en MOSKitt 1.5.0
Generación de entidades Java
● Cada uml::Class representa a una posible entidad del sistema.
● Cada uml::Property representa un posible atributo de una entidad.
● Cada uml::Operation representa una posible operación de negocio de una entidad.
● También soporte para uml::Interface y uml::Enumeration.
● Entre en juego la figura del EntityManager, que es capaz de persistir una entidad por sí mismo. No hay que modelar operaciones básicas de persistencia.
● Herencia simple (la soportada por Java).
● Podríamos simular herencia múltiple usando Interfaces, pero cuidado que JSR-220 no permite anotar en interfaces Java.
Transformación UML2JPA
Configuración de Persistencia en UML2JPA
Soporte de subconjunto de JSR-220, Java Persistence API●Table●SecondaryTable●SecondaryTables●UniqueConstraint●Column●JoinColumn●JoinColumns●Id●GeneratedValue●AttributeOverride●AttributeOverrides●AssociationOverride●AssociationOverrides●EmbeddedId ●IdClass ●Transient ●Version●Basic
Lob●Temporal●Enumerated●ManyToOne ●OneToOne ●OneToMany ●JoinTable ●ManyToMany ●MapKey ●OrderBy ●Inheritance ●DiscriminatorColumn●DiscriminatorValue ●PrimaryKeyJoinColumn●PrimaryKeyJoinColumns●Embeddable●Embedded●MappedSuperclass●SequenceGenerator●TableGenerator
Configuración de Persistencia en UML2JPA
Configuración de Validación en UML2JPA
Soporte de JSR-303, Bean Validation
●NotNull●MinSize●MaxSize●RegExp
Código generado por UML2JPA
● Se genera un fichero .java con una clase java por cada clase UML2. Si se ha configurado como Entidad, entonces será anotada como tal.
● Se genera un fichero .java con una interface java por cada Interface de UML2.
● Se genera un fichero .java con un tipo enumerado por cada Enumeration de UML2.
● Aquellos elementos que no han cambiado en las sucesivas generaciones de código no sobreescriben el fichero correspondiente. De este modo evitamos que gvNIX procese ficheros que no han cambiado.
Código generado por UML2JPA
Generación de servicios
En fase de análisis
Generación de servicios: Spring
Generación específica para Spring Framework (gvNIX): @Service
Provee transparencia en la localización física de la lógica de negocio.
Generación de servicios
Generación estándard independiente de la plataforma: WSDL
gvNIX dará soporte a generación de servicios en base a WSDL
Generación de servicios: WSDL
Generación de Interfaz de Usuario
En fase de análisis
Generación de Interfaz de Usuario
Gracias por su AtenciónGracias por su Atención