openxava

Trataremos una manera de abordar el diseño de aplicaciones, que surge de la experiencia y la reflexión de cómo se abordan una gran parte de éstas. Se denomina desarrollo o diseño dirigido por el dominio, domain driven design, en inglés, o por su acrónimo DDD; muy probablemente si tenemos que gestionar, clientes, países o cualquier otro dato maestro u otros más complejos, necesitaremos una pantalla para buscar, listar resultados, dar de alta, editar existentes y eliminar. Pues la programación dirigida por el dominio, ofrece la posibilidad de tan sólo diseñando la estructura de nuestros datos, las clases, la DDD nos generará las tablas para el almacenamiento y las vistas para toda esa funcionalidad. El resultado es la creación de aplicaciones de una manera extremadamente productiva y ágil, sin perder la posibilidad de hacer tratamientos complejos de los datos cuando sea necesario.
Para aprender mejor todos estos conceptos, mejor tratar ejemplos, y para ello el framework elegido es Openxava.

Openxava

Es un producto interesante que cumple con las especificaciones esperadas de la programación dirigida por el dominio, que genera unas interfaces de gran calidad, que no obstante también pueden ser personalizadas.

También es muy fácil de instalar; una vez descargado el zip, éste viene con un workspace de Eclipse y con un Tomcat. La creación de un nuevo proyecto se realiza a partir de una tarea ant, a la que tan sólo hay que proporcionarle el nombre que tendrá la nueva aplicación.

A continuación se va a construir un programa sencillo, escribiendo una mínima cantidad de código, explorando las grandes posibilidades de maquetación y presentación de los datos, sin recurrir a nada de html.

Se desarrollará una web para gestionar películas. Sólo eso. Sencilla conceptualmente, aún más de codificar.

pelicula

Lo más llamativo son las anotaciones. Está fuera de alcance detallar el funcionamiento de todas ellas. A destacar @Entity que determina que una tabla con la estructura deducida será creada. Y también se va a generar toda la lógica para crear, modificar, eliminar, buscar y generar informes de la entidad.

Arrancamos el Tomcat y al acceder a la web http://localhost:8080/App/m/Pelicula éste es el resultado:

lista_detalle

También es destacable la anotación @Stereotype. Permite dar una presentación y validación especial a la propiedad. En la aplicación anterior sólo la fecha de estreno, tiene especificado uno, que provoca que se genere el componente de calendario en el formulario. Pero el framework dispone de muchos otros más.

Hasta este momento hemos descrito una clase que genera una tabla. Una clase entidad. Pero también es posible crear clases cuyo único fin es la presentación de datos, es decir, de generar vistas. Y aquí radica la gran flexibilidad de Openxava, que puede ser usado para implementar cualquier funcionalidad.

Vamos a crear la clase Index, que como su nombre sugiere tendrá la finalidad de ser la página de inicio de la aplicación que ya hemos empezado. Tendrá esta sencilla estructura:

index

Luego implementaremos la clase que cargará las listas anteriores de la clase Index. La llamaremos IndexAction:

action

La declaración de esta operación hay que añadirla al fichero controladores.xml:

cont-xml

Finalmente, hay que añadir la declaración de este nuevo módulo al fichero application.xml de la siguiente manera:

mod

Por lo tanto, esta aplicación sencilla estará compuesta por dos pantallas, o dos módulos: uno para gestionar las películas, y otro que hemos llamado Index. En el primer caso, sólo se ha definido la estructura de la entidad, y dado que se deja la funcionalidad por defecto no ha sido necesario configurar nada más. En el segundo caso, la acción personalizada de carga de la información ha implicado crear un nuevo módulo. Si se hubiese deseado sobrescribir alguna funcionalidad proporcionada por defecto, como por ejemplo la de guardar entidad, o si se hubiese deseado añadir algún botón más a la pantalla, se tendría que haber definido un nuevo módulo de manera análoga.

La anotación @View determina la disposición de las propiedades en la pantalla, es decir, la maquetación de la pantalla. En este ejemplo, un texto estático haciendo de cabecera, y debajo de éste, dos columnas con dos listas de películas. El punto y coma (;) determina el salto de línea, y la coma (,) que un elemento se pondrá a continuación del primero. Éste es el aspecto que tendrá:

vista

El resultado es muy interesante dado que no hemos escrito nada de html. El recurso del texto estático, se ha obtenido añadiendo la propiedad textoCabecera al fichero un fichero de propiedades de la siguiente manera:

textoCabecera=App para la gestión de películas

Así también se tiene la opción de internacionalizar la aplicación.

Toda la información se puede ampliar consultando la web oficial del proyecto:

http://www.openxava.org

Y la guía de referencia:

http://openxava.wikispaces.com/overview_es