Si no te gustan los videos sigue
las instrucciones a continuación.
Si no estás familiarizado con el
desarrollo ágil puedes echar un vistazo a
agilemanifesto.org.
Básicamente, el desarrollo ágil favorece el uso de retroalimentación
obtenida de un producto funcional sobre un diseño previo meticuloso. Esto
da más protagonismo a los programadores y usuarios, y minimiza la
importancia de los analistas y los arquitectos de software.
Este tipo de desarrollo necesita también un nuevo tipo de herramientas.
Porque necesitas una aplicación funcional rápidamente. Tiene que ser tan
rápido desarrollar la aplicación inicial como lo sería escribir la
descripción funcional. Además, necesitas responder a las peticiones y
opiniones del usuario rápidamente. El usuario necesita ver sus propuestas
funcionando en corto tiempo.
OpenXava es ideal para el desarrollo ágil no sólo porque permite un
desarrollo inicial muy rápido, sino porque también te permite hacer
cambios y ver su efecto instantáneamente. Veamos un pequeño ejemplo de
esto.
Por ejemplo, una vez que el
usuario ve tu aplicación y empieza a jugar con ella, se da cuenta que él
trabaja con libros, música, programas y así por el estilo. Todos estos
productos tienen autor, y sería útil almacenar el autor, así como ver los
productos por autor.
Añadir esta nueva funcionalidad a tu aplicación es simple y rápido. Lo
primero es crear una nueva clase para Autor con el siguiente
código:
package com.tuempresa.facturacion.modelo;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;
import org.openxava.annotations.*;
import lombok.*;
@Entity @Getter @Setter
public class Autor {
@Id @GeneratedValue(generator="system-uuid") @Hidden
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(length=32)
String oid;
@Column(length=50) @Required
String nombre;
}
Ahora, añade este código a la ya
existente entidad Producto:
@ManyToOne(fetch=FetchType.LAZY)
@DescriptionsList
Autor autor;
Así, tu entidad Producto
tiene una referencia a Autor.
Realmente has escrito una cantidad pequeña de código. Para ver el efecto,
solo necesitas reiniciar tu aplicación pulsando el botón Run:
Después ve al navegador y recarga
la página con el módulo
Producto, y ahí verás, un combo para
escoger el autor del producto, como se muestra aquí:

Añadir una colección
de entidades
¿Qué ocurre si el usuario quiere
escoger un autor y ver todos sus productos? Está chupado. Solo has de
hacer la relación entre Producto y Autor
bidireccional. Ve a la clase Autor y añade el siguiente código:
@OneToMany(mappedBy="autor")
@ListProperties("numero, descripcion, precio")
Collection<Producto> productos;
Ahora reinicia tu aplicación y
refresca tu navegador con el módulo
Autor. Escoge un autor y
verás sus productos. Tienes algo parecido a esto:
Sí, añades una nueva colección,
rearrancas tu aplicación, refrescas tu navegador y tienes una interfaz de
usuario completa para manejarla. En este caso el usuario puede pulsar en
el botón Añadir para escoger un libro de una lista de libros
existentes o pulsar Nuevo para introducir los datos para crear un
nuevo libro que se añadirá a la colección. Además, el autor no se puede
borrar mientras tenga libros asociados a él. Puedes definir un
comportamiento diferente con cascade como REMOVE o ALL, así:
@OneToMany(mappedBy="autor", cascade=CascadeType.REMOVE) // NO LO AÑADAS A TU CÓDIGO
De esta forma sólo el botón
Nuevo
para crear nuevos libros está disponible, el botón
Añadir no está
presente. Además, cuando el autor se borre sus libros se borrarán también.
Para el caso autor/libros no queremos este comportamiento, pero puede ser
útil en muchos casos donde una
@ElementCollection sea
insuficiente.
Resumen
Esta sección ha mostrado el código completo y los pasos para hacer cambios
y ver el resultado de una manera muy interactiva. Tus ojos han visto como
OpenXava es una herramienta ágil, ideal para hacer desarrollo ágil.
Efectivamente tienes una
aplicación funcional con poco esfuerzo. Aunque esta aplicación “tal cual”
puede servir como utilidad de mantenimiento o un prototipo, todavía
necesitas añadir validaciones, lógica de negocio, comportamiento de la
interfaz de usuario, seguridad y así por el estilo para convertir estas
entidades que has escrito en una aplicación de gestión lista para tus
usuarios.
Aprenderás estos temas avanzados en las siguientes lecciones.
Descargar código fuente de esta lección
¿Problemas con la lección? Pregunta en el foro ¿Ha ido bien?
Ve a
la lección 6