Wednesday 9 March 2011

Primeras impresiones de Griffon

Este fin de semana he terminado una aplicación de escritorio aprendiendo a utilizar el framework Griffon.

Griffon es un entorno de desarrollo inspirado en Grails que te permite crear aplicaciones de escritorio de un modo más agil.

La verdad es que cuando hablamos de aplicaciones de escritorio, el termino agil nunca ha sido lo primero que se me venía a la mente, pero desde que estuve en la charla de Andres Almiray en la SpringIO de Madrid tenia muchas ganas de ver de lo que era capaz de hacer Griffon.

Para hacer una prueba de concepto he creado una aplicación de busqueda de ficheros sencilla. Busca en un directorio ficheros por el nombre o por una expresión regular. La plicación, una vez finalizada, tiene este aspecto:






El tiempo que empleas en comenzar a desarrollar la aplicación es mínimo, al ser el entorno igual que el de Grails, instalas el entorno, creas tu aplicación con un simple comando :



griffon create-app nombreDeTuAplicacion


Una vez que has creado tu aplicación lo que quieres es configurarla para tu entorno preferido (Eclipse en mi caso) por lo que ejecutas



griffon intergrate-with -eclipse


Ya tenemos configurada nuestra aplicación para Eclipse por lo que ya podemos empezar a desarrollar.

Lo primero que vemos en nuestro entorno es una estructura determinada. Al igual que Grails tenemos una serie de convenciones de directorios que debemos tener en cuenta:




Solamente destaco los más importantes:

  • griffon-app/conf : Donde puedes configurar aspectos como dependencias, loggin
  • griffon-app/models: Aqui se guardarán las clases Groovy que representen el modelo de datos de la aplicación
  • griffon-app/views: Las vistas, los componentes visuales de tu aplicación, layouts, botones, tablas...etc.
  • griffon-app/controllers: Clases encargadas de la logica de nuestra aplicación. Los controladores tienen inyectados por defecto tanto el modelo como la vista de su mismo grupo MVC.
  • griffon-app/resources: En este directorio guardaremos recursos estáticos que queramos utilizar en nuestra aplicación como por ejemplo imagenes.

El desarrollo de una aplicación en Griffon se basa en grupos MVC, cada grupo contiene :

  • Vista: los componentes graficos: tablas, botones, layout...etc
  • Controlador: la lógica de nuestra aplicación
  • Modelo: Donde representaremos el modelo de datos de nuestra aplicación.

Creo que el planteamiento es bastante limpio, el desarrollador debe especializar la tarea dependiendo de si quiere crear un componente, un controlador, o el modelo que recoge los datos.

Griffon, al igual que Grails tiene una plataforma de plugins. He utilizado varios de ellos en este pequeño proyecto y la verdad es que se agradece mucho ir agregando ciertas funcionalidades sin tener que ir a buscar a otro sitio, simplemente ejecutas griffon list-plugins y te mostrara una lista con todos los plugins disponibles, ademas de los que ya tienes instalados:



En este proyecto he utilizado los siguientes plugins

  • charts: Para crear gráficas
  • docking-frame: Sistema de ventanas basado en Docking Frames
  • eclipse-support: Plugin que actualiza la configuración de Eclipse a medida que vamos actualizando la aplicación (Por ejemplo cuando instalamos un nuevo plugin).
  • jbusycomponent: Pluginque nos permite mostrar un componente como ocupado mientras realizamos tareas en background.
  • jxlayer: Plugin dependencia de jbusycomponent
  • miglayout: Layout para crear estructuras de formulario de manera sencilla
  • silkicons: Grupo de iconos para poder utilizar en nuestra aplicación
  • swingx-builder: Builder que nos permite utilizar componentes de Swingx

Los plugins creo que son uno de los puntos fuertes de Griffon, solo pediría que hubiera un poquito mas de documentación de alguno de ellos. Dicho esto, todos los plugins que he utilizado se han comportado de manera estable y no he tenido ningún problema.

Si los plugins te parecen poco, y quieres importar aquella libreria que te gusta tanto, Griffon esta perfectamente integrado con maven, por lo que puedes importar dependencias en cualquier momento:

En el ejemplo he necesitado importar las librerias del proyecto Viewa (http://www.viewaframework.org) para utilizar un componente en concreto (Pincha sobre la foto y se verá mejor).





Bastante sencillo.

Otro punto a favor es la facilidad de utilización de los “bindings” entre el modelo y el controlador, y la vista. Esto ha sido uno de los puntos más negros en el desarrollo de aplicaciones de escritorio. Griffon se aprovecha de la anotacion @Bindable además de los diferentes métodos bind(...) disponibles para hacer que los componentes reaccionen ante cambios en el modelo de datos.

Por ejemplo si queremos que el boton buscar se habilite cuando cierto componente de texto deje de estar vacio podriamos haberlo declarado de la siguiente manera:




Como vemos le estamos diciendo que se habilitará cuando la propiedad “dirty” del modelo sea true. Simple y rápido.

Por ultimo antes de resumir los pros y los contras de Griffon cabe destacar la posibilidad de desplegar tu aplicación en webstart, como applet, o como una aplicación “standalone”.

Para terminar destacaría los siguientes puntos fuertes de griffon:

  • Tiempo mínimo de comienzo en el desarrollo
  • Convencion sobre configuración
  • Basado en Groovy
  • Plataforma de plugins y addons
  • Facilidad en la distribución del ejecutable

Como puntos en contra solo echaría en falta mayor documentación en alguno de los plugins disponibles.

Ah! Que no se te olvide ejecutar tu aplicación:


griffon run-app


A continuación pongo una serie de links importantes si se quiere empezar a desarrollar con Griffon:

No comments:

Post a Comment