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