Entre Ruby on Rails y Grails, ¿cuál estás usando y por qué?

Habiendo usado tanto Grails como Rails en la producción, aquí están mis pensamientos.

tl: dr : me gustan ambas por razones muy diferentes, prefiero Grails en general, pero Rails es un marco fantástico que no debe pasarse por alto. Al final del día, la preferencia se reduce a los detalles del marco.

Rieles

Un marco de desarrollo web construido sobre Ruby, hace uso de la convención sobre la configuración, y está diseñado para maximizar la felicidad del desarrollador.

La mayoría de los desarrolladores familiarizados con Rails deberían poder comenzar un nuevo proyecto con los comandos de andamiaje incluidos y tener una aplicación web básica en funcionamiento en un corto período de tiempo.

Hay una gran cantidad de documentación, muchos desarrolladores utilizan el lenguaje y, como tal, será difícil encontrar un problema que no tenga una solución documentada en algún lugar de Internet. Gracias al equipo de desarrollo de Rails, la documentación está limpia, bien pensada y es un placer trabajar con ella.

Notarás que Rails es sintácticamente muy limpio y simple, las características del lenguaje han sido muy bien pensadas y hacen lo que crees que están haciendo.

Rails tiene muchas características de prueba agradables, puede usar Rspec o el marco de prueba predeterminado. Es agradable ver algo simple ya incluido en el marco y, por supuesto, es fácil de usar.

El trabajo de la base de datos es manejado por el registro activo orm. Si bien no siempre es fantástico, es un placer trabajar con él y proporciona una cantidad razonable de energía, y afortunadamente siempre puedes saltar y escribir sql directamente si es necesario.

Griales

Grails es lo que generalmente prefiero usar, como Rails, es un marco para desarrollar aplicaciones web, prefiere la convención sobre la configuración y le gusta maximizar la felicidad del desarrollador.

Al estar construido sobre Groovy, Grails toma el poder de la JVM con una sintaxis simple, fácil (relativamente) de leer. Sin dejar de mantener la velocidad y otras ventajas proporcionadas por la JVM. Se compila en código de bytes Java y, por supuesto, se puede ejecutar prácticamente en cualquier lugar.

Al igual que Rails, Grails es un marco clásico de MVC. Notarás muchas similitudes entre los dos a este respecto.

Grails utiliza Spring Boot e Hibernate debajo del capó. Estos son dos productos muy maduros. Después de haber estado en uso en la industria durante mucho tiempo, aportan una gran cantidad de características bien diseñadas y estabilidad a la plataforma Grails.

En términos de documentación, Grails está bien documentado, sin embargo, Grails tiene muchos menos usuarios en comparación con Rails. Como resultado, la cantidad de preguntas simples y respondidas que flotan será mucho menor.


Generalmente prefiero usar Grails, sin embargo, Rails es un marco fantástico. Una vez que esté familiarizado con los conceptos básicos, ambos se pueden utilizar para activar una nueva aplicación muy rápidamente y proporcionar las herramientas necesarias para hacer grandes cosas.

La velocidad del idioma no debería ser una preocupación aquí, mientras que Grails obviamente va a correr más rápido, hay mejores cosas de las que preocuparse (como ¿quiero usar Hibernate sobre Active Record, o qué debo cocinar para la cena esta noche?).

Generalmente prefiero usar Hibernate sobre Active Record, Spock sobre Rspec.

Sintácticamente hay pequeñas diferencias, el operador de elvis para uno es una muy buena adición.

Por supuesto, al estar construido sobre la JVM, Grails puede hacer uso de subprocesos y concurrencia. También tiene acceso a cualquier complemento que funcione en el ecosistema de Java.

Grails, anteriormente conocido como “Groovy on Rails”, es un marco de aplicación web que utiliza el lenguaje de programación Groovy. Ruby on Rails es muy similar, pero usa Ruby.

He trabajado tanto en Groovy on Grails como en Ruby on Rails.

1. Ambas son plataformas ágiles y siguen el principio DRY o ‘no te repitas’.

2. Ambos Grails es un marco de marcos. Puede escribir código de sintaxis Java o Ruby en lugar del código de sintaxis Groovy, funcionará perfectamente.

3. En Groovy también podemos usar los marcos Java Spring e Hibernate.

4. Ambos soportan andamios.

5. Rails tiene gemas y complementos, pero en Grails, hasta ahora, solo he usado complementos.

6. El framework Rails está construido en lenguaje Ruby y el framework Grails está construido en lenguaje Groovy.

Ambos son marcos maravillosos.

Groovy y Grails se han convertido en competidores de Ruby y Rails que adoptan firmemente el lenguaje y la plataforma Java. Por ejemplo, mientras Grails copia muchas ideas de Rails, lo hace aprovechando los marcos existentes como Spring e Hibernate para lograr esto.

Groovy se creó en 2003 y es un lenguaje dinámico que fue el primero, y actualmente el único lenguaje aprobado por JSR (JSR-241) que no es Java para JVM. Aunque, para ser justos, otros lenguajes como Ruby están bajo el paraguas de JSR-223 Scripting para la Plataforma Java, y cientos de otros lenguajes pueden compilarse para bytecode y ejecutarse en la JVM.

Las similitudes de Groovy con Java y su dependencia del JDK lo distinguen de estos otros lenguajes dinámicos y le permiten alcanzar un nivel de integración con Java que aún no se ha alcanzado en otros lenguajes.

Algunos beneficios de usar Groovy son:

  • el código Java más válido también es código Groovy válido
  • orientado a objetos
  • cuatro niveles de alcance variable: enlace (global), clase, instancia y local
  • Visibilidades variables de tres clases / instancias: pública, protegida y privada (no se admite el acceso predeterminado al paquete de Java)
  • manejo de excepciones (a diferencia de Java, capturar cualquier tipo de excepción es opcional)
  • iteradores y cierres (basados ​​en pasar bloques de código)
  • expresiones regulares nativas, similares a Perl a nivel de lenguaje
  • sobrecarga del operador
  • recolección automática de basura
  • altamente portátil
  • Carga dinámica de DLL / biblioteca compartida en la mayoría de las plataformas
  • introspección, reflexión y metaprogramación
  • gran biblioteca estándar
  • admite inyección de dependencia (a través de marcos externos)
  • admite la alteración del tiempo de ejecución del objeto
  • admite mixins (a nivel de clase e instancia a través de Categorías)
  • escritura estática y escritura dinámica (es decir, la escritura estática es opcional)
  • sintaxis nativa para listas, mapas y expresiones regulares (diferentes a Java)
  • capas de métodos Groovy JDK adicionales en clases Java JDK existentes
  • Soporte de concurrencia a nivel de idioma (se puede implementar a través de hilos nativos o verdes dependiendo de JVM)

El hecho de que Grails aproveche Hibernate le da una poderosa ventaja cuando se trata de capacidades avanzadas de ORM, como poder conectar un caché de segundo nivel. En cuanto a si esas características son necesarias, eso realmente depende del proyecto, pero es una posible fuente de ventaja para Grails.

Dicho esto, el enfoque de Grails elimina la dependencia de la base de datos, y en un mundo utópico hace que el trato directo con la base de datos sea irrelevante. Se podría argumentar que no necesitar la base de datos le permite escribir pruebas unitarias sin necesidad de la base de datos, pero de manera realista casi cualquier aplicación va a utilizar al menos algunos de los buscadores dinámicos en GORM que dependen de la base de datos subyacente para ejecutarse

Fuera de mi cabeza, hay tres razones principales por las que uso RoR sobre Grails.

  1. La documentación es más completa y la comunidad es extremadamente sólida. Stackoverflow es “desbordante”, juego de palabras, con contenido RoR.
  2. Grails está basado en Java, que personalmente no me gusta trabajar con él. Es extremadamente detallado y no tiene sentido para mí en comparación con un lenguaje como Ruby que es mucho más fácil de entender, aprender e implementar. Pero esa es solo mi opinión :).
  3. Rails tiene algunos casos de uso exitosos como Twitter y Groupon (la pila tecnológica, no las empresas 🙂)

En general, prefiero rubí a java. Sin embargo, si agrega JavaScript y nodo a la mezcla, esa podría ser otra historia.