generación de código sobre plataformas específicas de desarrollo de aplicaciones con moskitt

42
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 gvNix desarrollo de aplicaciones: gvHidra y gvNix Jose Manuel García Valladolid Héctor Iturria Sánchez [email protected] [email protected]

Upload: jose-manuel-garcia-valladolid

Post on 06-Jun-2015

1.113 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

[email protected]

[email protected]

Page 2: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 3: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 4: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 5: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Modelos y arquitectura

Page 6: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Mapa de generación de código en MOSKitt

Page 7: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con 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)

Page 8: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 9: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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).

Page 10: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

Page 11: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Persistencia de los datos

Page 12: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 13: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Transformación UML2DB

Page 14: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 15: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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);

Page 16: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de la interfaz

Page 17: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de la interfaz

Page 18: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

Page 19: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Transformación Sketcher2gvHidra

CWSolapa CWFicha CWBotonTooltip

CWBotonCWCheckBox CWCampoTexto

CWPestanya

Page 20: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación del framework

Page 21: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 22: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 23: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

¡Prototipado en un paso!

Page 24: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 25: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Configuración de la transformación

Page 26: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

Page 27: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Construyendo un prototipo

DEMO

Page 28: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de código a gvNIX

Disponible en MOSKitt 1.5.0

Page 29: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 30: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Transformación UML2JPA

Page 31: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

Page 32: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Configuración de Persistencia en UML2JPA

Page 33: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Configuración de Validación en UML2JPA

Soporte de JSR-303, Bean Validation

●NotNull●MinSize●MaxSize●RegExp

Page 34: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 35: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Código generado por UML2JPA

Page 36: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de servicios

En fase de análisis

Page 37: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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.

Page 38: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

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

Page 39: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de servicios: WSDL

Page 40: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de Interfaz de Usuario

En fase de análisis

Page 41: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Generación de Interfaz de Usuario

Page 42: Generación de código sobre plataformas específicas de desarrollo de aplicaciones con MOSKitt

Gracias por su AtenciónGracias por su Atención