Ruby on Rails y Grails, cara a cara

Ya comenté que, al empezar a trabajar con Linking Paths, empezaría a utilizar Ruby on Rails y que pretendía hacer un cara a cara entre Ruby on Rails y Grails. Como podría ser un post muy largo y tampoco quiero ir dejándome cosas, la intención es hacerlo en una serie de posts tal y como vaya teniendo las ideas claras, espero tener tiempo y ganas para ir completándola :) . El objetivo no es decir cuál es mejor, sino simplemente que se vean las características de cada uno. En este post se van a tratar características generales y algunos parecidos razonables entre los frameworks.

A primera vista:

Como mucha gente sabrá los dos son frameworks web full-stack que siguen el patrón MVC, siguen el principio DRY(Don’t repeat yourself) y CoC(Convention over configuration). Lo primero que hay que decir es que Grails se basó en las ideas de RoR, incluso a Grails en un principio se le llamó Groovy on Rails pero los creadores de RoR pidieron que se le cambiara el nombre.

RoR está enteramente construido con Ruby. Mientras que Grails lo está con la combinación Java+Groovy usando frameworks y librerías muy conocidas por debajo(destacan Spring, Hibernate y Sitemesh).

Para empezar hay que destacar que, ambos frameworks, nos traen de serie un servidor/contenedor web y un servidor de bases de datos embebidos: RoR trae WEBrick y SQLite mientras que Grails Jetty y HSQLDB. De esta forma podemos trabajar en desarrollo sin preocuparnos de tener acceso o tener que instalar nada más.

Para la automatización de tareas repetitivas con RoR se usa Rake y con Grails Gant(basado en Apache Ant).

Como librería javascript, por defecto, las dos traen Prototype.

Manos a la obra:

Donde más parecido he encontrado ha sido en la capa más web. Con los dos se usan layouts para la decoración base de la página, para las vistas Grails usa GSP y RoR ERB, mientras que lo que en un sitio se llaman Taglibs en otro son Helpers. Existen diferencias de sintaxis y de cómo se hacen las cosas, pero las capacidades son muy parecidas.

Para el acceso a datos, en los dos se utiliza el patrón ActiveRecord a través de ORM’s, RoR utiliza uno del mismo nombre que el patrón y Grails GORM(basado en Hibernate y vitaminado con el dinamismo de Groovy). De inicio puede dar la impresión de que son casi equivalentes, pero este tema creo que tiene miga para tratarlo en otro capítulo.

Herramientas/IDE’s:

En este apartado, gana RoR sin discusión con el plugin de NetBeans o RadRails que tienen un soporte realmente bueno. Mientras que para Grails Jet Groovy de IDEA es el único con un soporte decente, el plugin de Eclipse todavía está lejos de ser bueno, y el de NetBeans está en desarrollo.

Aparte de esto, hay muchos editores que soportan sintaxis ruby, mientras que soporte a groovy todavía es muy difícil encontrar

Algunas conclusiones:

A nivel de madurez, se le nota mucho más maduro a RoR. Empiezan a verse bastantes aplicaciones en producción, tiene más documentación, más plugins y una comunidad mayor. Aunque hay algo donde creo que destaca Grails, es en cómo está organizada la documentación de referencia, tanto para empezar de cero como para buscar algo en concreto.

Para un programador acostumbrado a Java, la curva de aprendizaje de Grails es más baja, puedes empezar a trabajar de una forma más javera e ir introduciendo/aprendiendo la forma más ¿grooviera?, además de poder utilizar cualquier librería java.

7 Responses to “Ruby on Rails y Grails, cara a cara”

  1. knocte Says:

    ¿Por qué no mencionas la ventaja más importante de Grails? Que vas a poder enlazar con toda la librería de clases de Java o con cualquier librería compilada en bytecode de Java.

  2. Dani Says:

    Hola knocte,

    Justo al final: “además de poder utilizar cualquier librería java”.

    Quizás debería haberlo remarcado más, aunque no creo que sea la ventaja más importante de Grails sobre RoR. Sí es una ventaja interesante, como el usar sintaxis java, que corra sobre servidores de aplicaciones java, el que se pueda usar Hibernate y Spring “como siempre”…

    Para mi es la combinación de todo un poco lo que le da esa ventaja, pero eso como programador java, a un desarrollador que no conozca java no creo que le importe demasiado.

  3. David Calavera Says:

    Bueno desde que existe jruby poder utilizar cualquier librería java o correr en servidores de aplicaciones no es una ventaja en si misma, aunque la auténtica diferencia en correr una aplicación groovy con clases java a una aplicación jruby con clases java es que la primera usa el mismo bytecode que generaría una aplicación java en si misma, mientras que jruby tiene que modificarlo, con lo que se obtiene un major rendimiento.

    En cuanto a la guerra de ides hay que decir que está claro que de momento gana intellij, pero el desarrollo de netbeans ya está dando sus frutos, el parser está completo a falta de resolver algunos bugs y van a incluir features que de momento intellij no tiene.

  4. Dani Says:

    Hola David,

    De jruby no he comentado nada por no haberlo probado, por lo que he leído alguna vez por ahí es como tú dices.
    Sobre los ides, hace algún tiempo que espero ver el plugin de NetBeans, del que se habla muy bien. Si lo bien que se va hablando de este ide es así, quizás consigan “convertirme” :D

  5. David Calavera Says:

    bueno yo tengo un poco de información privilegiada sobre como va el plugin :P , he contribuido con algunos parches y ayer estuve visitando a la gente de sun que desarrolla netbeans en praga.

  6. Dani Says:

    Vaya David, pues espero que tengamos noticias de eso pronto :) . Espero leer algo sobre tu visita a Roumen y compañía en tu blog ;)

  7. » Resumen del Open Java Day 2008 Says:

    [...] La última fué la sesión sobre Grails: desarrollo web con Java como siempre debió ser de Nacho Brito, que también se hizo corta, habló de forma general sobre Grails y groovy, y en la demo sólo dió tiempo de llegar hasta el scaffolding dinámico y al sistema de layouts, sin poder verse otras de las bondades de este frameworks. Eso sí, hubo quien vió el parecido con Ruby on Rails enseguida . [...]

Leave a Reply