12.4.10

Groovy on Grails (I): Introducción

En los últimos años Internet ha ido evolucionando poco a poco hacia un entorno colaborativo entre usuarios, hasta llegar a la actualidad y a la Web 2.0, donde el entorno colaborativo ha culminado con la aparición de Blogs, Wikis, el e-commerce, … Esto último implica el estudio e investigación de nuevas tecnologías que hagan más sencillo el desarrollo de nuevas aplicaciones web tanto para el desarrollador como para el usuario llano.

El desarrollo de frameworks web ha ido evolucionando constantemente, desde los struts, framework que implementa el patrón de arquitectura Modelo Vista-Controlador en Java, hasta, por ejemplo, “Groovy on Grails”, buscando siempre una simplificación de código pero sin comprender una reducción de la calidad del producto final.


El problema abordado por este proyecto es la creación de una aplicación web de e-commerce, concretamente una tienda virtual de mascotas, utilizando la nueva tecnología basada en Groovy, Grails. Para la implementación de esta aplicación han sido necesarios varios estudios previos de cada una de las tecnologías que comprenden el mundo de “Groovy on Grails”, los cuales podriamos dividir en:
  • Estudio del lenguaje de programación Groovy
  • Estudio del framework basado en Groovy, Grails
  • Análisis, diseño e implementación de la aplicación web propiamente dicha
Groovy como lenguaje de programación


El 2 de Enero de 2007 aparecía la versión 1.0 de Groovy, un nuevo lenguaje de programación orientado a objetos desarrollado por Guillaume Laforge, Jefe de Proyecto y JSR-241 Spec Lead.
La implementación de Groovy se realiza sobre la plataforma Java además, tiene características similares a Python, Ruby, Perl y Smalltalk. Gracias a la especificación JSR-241, se busca su estandarización para una futura inclusión como componente oficial de la plataforma Java.
Groovy utiliza una sintaxis muy parecida a Java, compartiendo el mismo modelo de objetos, de hilos y de seguridad. Mediante importaciones, Groovy puede acceder a todas las API de Java ampliando la compilación, ya que el bytecode generado es totalmente compatible con el que Java genera para la Java Virtual Machine.


Para Groovy, Java no es un lenguaje incompatible con su código, todo lo contrario, todo el código escrito en Java es válido en Groovy. Este aspecto hace su aprendizaje mucho más sencillo a programadores Java que otros lenguajes que se ejecutan sobre la Java Virtual Machine, como Jython o Jruby

Java es totalmente compatible con Groovy, pero esto no hace que Groovy pierda todas las ventajas de un lenguaje de scripting, ya que también se puede ejecutar de forma dinámica. Por ejemplo, en Java la salida estándar de “Hello World” hace necesaria la escritura de una clase, un método main con una serie de argumentos, etc… Pero en Groovy, no es necesario escribir todo el código, te puedes ahorrar la declaración de la clase y el método main, y sólo escribir una línea de código que muestre por pantalla “Hello World”.
El contenido del archivo HelloWorld.groovy sería:
println “Hello World”
Como podemos observar, el dinamismo de un lenguaje de scripting se encuentra presente en Groovy, pero, ¿y la compatibilidad con Java?


Groovy da soporte a listas, mapas, etc… y aún podemos demostrar
la simplicidad de Groovy y su capacidad para ejecutar código en
Java:
//Printamos una fecha utilizando codigo Java
def mydate = new java.util.Date()
println mydate
//Iteración sobre un hash map
def numbersMAP = ['1':'ONE', '2':'TWO']
for (entry in numbersMAP) {
println "${entry.key} = ${entry.value}"
}
//Introducimos un rango
def range = 'a'..'d'
//Listas
def numberlist = [1, 2, 3, 4, 5, 6, 7, 8]
println numberlist;
println "Maximum value: ${numberlist.max()}"
Como podemos observar en el código, utilizamos directamente
java.util.Date y no importamos un soporte para colecciones para
trabajar con listas, mapas y rangos. Aunque no es necesario,como en el ejemplo, podemos exportar librerías Java para que el
proceso de desarrollo sea más cómodo.
En el apartado de tecnologías asociadas, profundizaremos más en
el mundo de Groovy mediante explicaciones y ejemplos.


Grails como framework Web


Grails es un framework para aplicaciones Web de libre distribución, que tiene como base el lenguaje de programación Groovy. Grails es un framework de alta productividad que viene distribuido bajo el paradigma del “código por convención” (MVC), el cuál proporciona un entorno de desarrollo independiente y unos detalles de configuración escondidos para el desarrollador.


Grails se llamó previamente “Groovy on Rails” (nombre que se le
puso en como homenaje a David Heinemeier Hansson, fundador de
Ruby on Rails, otro framework web). El trabajo de desarrollo
comenzó en Julio de 2005 que dio como fruto la versión 0.1 el 29
de Marzo de 2006 i la versión 1.0 el 18 de Febrero de 2008.


En el momento de su implementación, se estudiaron varios
conceptos a favor de Grails entre los que destacaban:
Proporcionar una alta productividad basándose en la
plataforma de Java.
  • Utilizar de manera más simple tecnologías de Java como Hibernate y Spring, mediante una interface consistente.
  • Un framework sencillo y fácil de aprender.
  • Documentación con participación de los usuarios.
  • Proporcionar simplicidad en áreas donde antes solo podían adentrarse usuarios expertos:
    • Framework persistente potente y consistente.
    • Uso sencillo pero potente de las templates de vista utilizando GSP (Páginas de Servidor Groovy).
    • Librerías de tags dinámicas para una creación de componentes web sencilla.
    • Buen soporte a Ajax pero simple de ampliar personalizar.
  • Proporcionar ejemplos de aplicaciones con los que demostrar la potencia de este nuevo framework.
  • Proporcionar un modo de desarrollo completo, incluyendo un servidor web y un sistema de carga de ficheros automática.
Dichos objetivos se han conseguido en mayor o menor grado, entre los logros más relevante, cabe destacar:
  • Framework sencillo y simple
Gracias a la implementación de Grails basandose en el paradigma del “código por convención” (MVC), se han conseguido realizar nuevas implementaciones, ya sea en la mejora del código o en su funcionalidad. Las más relevantes son:
    • Controllers: sustitutos naturales de los Servlets tal y como los conocemos, ya que siguiendo la convención de Grails crearemos una Closure de Groovy cada vez que queramos realizar una acción sobre una clase de la aplicación web. La creación de un controlador vendría dado por:
$> groovy create-controller
----------------------------------------------------
def list = {
if(!params.max) params.max = 10
[ petList: Pet.list( params ) ]
}
    • Soporte a Ajax y uso de librerías dinámicas para poder implementar plugins con el fin de facilitar la implementación de la nueva aplicación web.
  • Persistencia y alta productividad
    • La alta productividad viene dada por el uso del lenguaje de scripting Groovy como base de programación, ya que sobre este lenguaje se podría aplicar un famoso dicho, “Nunca tan poco a dado tanto”, ya que con poca cantidad de código se puede realizar una pequeña aplicación en Grails.
    • La persistencia en Grails viene dada por la simplicidad de creación de sus clases de dominio:
$> groovy create-domain-class
----------------------------------------------------
class Cart {
String status
String payment
String numberTarget
Float total
Map contentBuy=[1 : 1]
}
    • Implementación del soporte más importante para las operaciones CRUD (Create, Read, Update, Delete), el Scaffolding. Scaffolding es un método para construir aplicaciones basadas en bases de datos, esta técnica está soportada por algunos frameworks del tipo MVC en el cuál el programador escribe una especificación que describe cómo debe ser usada la base de datos. Luego el compilador utiliza esa especificación para generar el código que la aplicación usará para crear, leer, actualizar y eliminar registros de la base de datos. En Grails la activación del Scaffolding es tan sencilla como la mayoría de implementaciones en Grails.
class cartController {
scaffold = true
}
Como podemos observar, Grails es un framework potente pero a la par sencillo, ahora sólo hemos nombrado los aspectos más relevantes por lo que a continuación, en el apartado de tecnologías asociadas, profundizaremos más en el mundo de Grails mediante explicaciones y ejemplos, posteriormente realizaremos una implementación completa de una aplicación web de e-comerce.

No hay comentarios: