Ruby on Rails: el framework MVC para aplicaciones web complejas

En 2004, la empresa de desarrollo web estadounidense 37signals (hoy Basecamp) publicaría la aplicación de administración de proyectos Basecamp, que, entre otras funciones, ofrecía características tales como un sistema de mensajes, listas de tareas pendientes o time tracking. Una parte del software era una arquitectura base que, creada especialmente para este fin por el programador David Heinemeier Hansson, fue extraída en el mismo año y publicada en 2005 como un marco de aplicación web de código abierto. Había nacido el entorno de trabajo Ruby on Rails, también conocido como RoR o Rails. Desarrollado sobre las bases de Ruby, en los inicios del framework, que cuenta  actualmente con un equipo de desarrollo de varias personas, nadie imaginó que se convertiría en una de las soluciones de creación web más utilizadas, contando.

¿Qué es Ruby on Rails?

Desde que se publicó bajo la licencia MIT, los creadores de Ruby on Rails han continuado con el desarrollo de este framework, manteniéndose fieles al principio “Don’t repeat yourself” (DRY; en español, “no seas repetitivo”). En otras palabras, en un proyecto basado en el framework Rails la información solo puede utilizarse una única vez. Por ejemplo, basta con definir las columnas de una tabla en la base de datos sin que dicha información se modifique en el código fuente o en un archivo de configuración independiente. Así, el módulo ActiveRecord implementado lo leerá directamente desde la base de datos.

El segundo paradigma de diseño es “Convention over configuration” (en español, “convención sobre configuración”). Ruby on Rails usa ciertas convenciones, por ejemplo, para nombrar clases. Si eres desarrollador y te vales de estas convenciones, te ahorrarás una gran cantidad de esfuerzos en la configuración. Sin embargo, Ruby on Rails también permite configuraciones alternativas, por lo que siempre tendrás a disposición una gran flexibilidad a la hora de desarrollar tu aplicación web.

Ruby: el lenguaje flexible e independiente del framework Rails

A mediados de los años 90, el japonés Yukihiro Matsumoto publicaría Ruby, un lenguaje orientado a objetos. Aunque en sus inicios este se utilizó casi exclusivamente en Japón, con el paso del tiempo se ha posicionado globalmente como una alternativa popular a líderes del mercado como PHP, Python y cía. Sin embargo, el éxito de Matsumoto no es casualidad, pues este se propuso hacer de la programación un proceso divertido y, para lograrlo, decidió combinar las mejores características de otros lenguajes en Ruby. En la interpretación de secuencias de comandos, el código es ejecutado por un intérprete (algo que en comparación con otro scripts representa una pequeña disminución de la velocidad), convirtiendo a Ruby en una solución mucho más flexible y dinámica. Gracias a que existen intérpretes específicos para los principales sistemas operativos, el código de Ruby es independiente de plataforma.

Una característica muy importante de Ruby es su capacidad multiparadigma, donde también sobresale, por ejemplo, C++. En otras palabras, Ruby no está vinculado a un paradigma de programación en particular. El “principio de la mínima sorpresa” te permite utilizar el lenguaje de forma intuitiva y, por lo general, no te encontrarás con procesos inesperados. Como software de código abierto bajo licencia libre BSD, Ruby forma parte de una numerosa y activa comunidad que ha contribuido con numerosas bibliotecas de programas actuales que también están sujetos a esta licencia y que desempeñan un papel muy importante en el desarrollo de aplicaciones web modernas. Estos paquetes de software se pueden instalar, utilizar y actualizar con la ayuda de las llamadas RubyGems. Algunos ejemplos de estas Gems son, por ejemplo, las interfaces de programación de aplicaciones web (API) de Google o de Facebook, así como el framework Rails.

Modelo-Vista-Controlador (MVC)

Ruby on Rails usa sistemas cerrados como entorno de ejecución. Estos sistemas contienen el intérprete, las bibliotecas necesarias y cada uno de los scripts. Cada proyecto Rails está sujeto a una estructura de directorios generada automáticamente que separa scripts, configuraciones, clases, contenidos y demás. Gracias a este enfoque estructural, en el que se separan datos, gestión y representación, las aplicaciones web son muy fáciles de mantener. Esto se conoce como una arquitectura Modelo-Vista-Controlador, cuyas capas se pueden describir de la siguiente manera:

Modelo

Normalmente, las aplicaciones Rails están vinculadas a bases de datos relacionales. El framework Ruby necesita modelos para comunicarse con cada sistema de gestión de bases de datos y para personalizar o manipular objetos. Estos modelos forman clases en una tabla de base de datos y atributos individuales en las columnas. Por defecto, la capa Modelo se basa en el entorno de trabajo ORM (mapeo objeto-relacional) ActiveRecord. Gracias a la implementación del API para plugins, desde Rails 3.0 es posible utilizar bibliotecas ORM como, por ejemplo, Sequel.

Vista

La capa Vista o capa de presentación es necesaria para visualizar y acceder a los datos de la capa Modelo. Para este propósito, Ruby on Rails utiliza la clase Action View, que es compatible con diferentes formatos de salida. Vista renderiza y presenta los datos (p. ej., el usuario solicitante) en forma de documentos HTML. Los documentos XML o JSON facilitan el acceso a las entradas de la base de datos de otros programas o servicios disponibles.

Controlador

La capa Controlador sirve como interfaz entre las capas Modelo y Vista y procesa las solicitudes entrantes a través del navegador web, accede al modelo apropiado de la base de datos y lo transmite a Vista, que se encargará de su visualización. Como unidades centrales de control de las aplicaciones Rails, los controladores también administran las funciones de almacenamiento en caché o se hacen cargo de las diferentes peticiones que los clientes individuales han realizado a lo largo de un período de tiempo en una sola sesión.

Los componentes estándar de Ruby on Rails

Como entorno de trabajo para aplicaciones web, Ruby on Rails proporciona en su configuración estándar todos los componentes necesarios que un desarrollador necesita para programar una aplicación funcional. El único requisito adicional es la instalación de Ruby, del gestor de paquetes RubyGems y de una base de datos SQL. Para esta última, el equipo Rails recomienda la biblioteca de código abierto escrita en C SQLite, que contiene un sistema de bases de datos relacional. A continuación, presentamos los módulos estándar de Ruby on Rails:

  • Action Contoller: con la ayuda de este módulo es posible crear las mencionadas interfaces entre las entradas de las bases de datos, los usuarios y los programas.
  • Action View: este módulo ofrece la posibilidad de crear vistas para las entradas y los controladores. En cuanto a la nomenclatura existe la convención de que todas las Views deben ser nombradas como el respectivo controlador. 
  • Active Record: este es el módulo central utilizado para manipular la base de datos de tu aplicación Rails. Si te adhieres a las convenciones relativas al nombre y al esquema, solo es necesario realizar algunas configuraciones mínimas para generar con él los modelos individuales. Para este fin, Ruby on Rails ofrece potentes sistemas scaffolding (en español, de “andamiaje”), que son la herramienta ideal para producir interfaces para las cuatro operaciones CRUD y para presentar el conjunto de datos en el nivel orientado a objetos.
  • Active Resource: implementa el mapeo de objeto-relacional (ORM) para servicios web basados en REST. Como ActiveRecord, este también se concentra en guardar las configuraciones.
  • Action Mailer: Action Mailer permite enviar y recibir mensajes de correo electrónico en tus aplicaciones web. De esta forma es posible configurar, sin complicaciones, el registro e inicio de sesión de correo electrónico.
  • Active Support: este componente contiene varias clases de programas de asistencia técnica, así como extensiones de la biblioteca estándar.
  • Railties: los llamados railties fueron creados para asegurar el funcionamiento de todos los componentes de RoR. Como consecuencia, cada módulo ha implementado su propio railtie, por ejemplo, para lanzar el proceso de inicialización o implementar cambios de configuración en el framework. Los railties también son necesarios para añadir módulos propios a Ruby on Rails.

Ruby on Rails: ventajas y desventajas de este framework web

En la plataforma wikibooks.org encontrarás una gran cantidad de documentación en diferentes idiomas e incluso, chistes como este:

  • Dos desarrolladores están hablando de programación. Uno le dice al otro: “Yo trabajo con Java y doy PHP a mis hijos para que jueguen con él”. Y el otro responde: “¡Yo juego con mis hijos y dejo que Ruby trabaje por mí!”

Por supuesto, en esta broma se encuentra una buena dosis de exageración, pero básicamente también una gran parte de verdad. Java es una de las opciones preferidas para soluciones complejas y, por lo tanto, es utilizada en muchos frameworks del sector empresarial. Sin embargo, en especial debido a su compleja estructura, programar con este lenguaje independiente de plataforma suele ser muy complicado y, además, está constantemente asociado a altos costes de tiempo y dinero. Como lenguaje de programación interpretado, Ruby tampoco se adjunta a una plataforma en particular. Además, escribir un código con Ruby es rápido, fácil de adaptar e implica un esfuerzo mucho menor. Sin embargo, el lenguaje intérprete también se encarga de que la velocidad de las aplicaciones desarrolladas sea más lenta que las aplicaciones equivalentes en Java.

También PHP, en comparación con Java, representa ventajas significativas en términos de simplicidad y esfuerzos de desarrollo. En el entorno del desarrollo web, este lenguaje es reconocido por ser una solución estándar establecida que constituye la base de diferentes sistemas de gestión de contenidos como Joomla, WordPress, TYPO3 y otros. Debido a que PHP fue compilado de manera algo arbitraria y no siempre se orientó a objetos, actualizar aquellas aplicaciones web que fueron desarrolladas con versiones anteriores puede resultar algo tedioso. Por su parte, desde sus inicios, Ruby on Rails estuvo orientado a objetos, por lo que las aplicaciones que se programaron utilizando versiones más antiguas contienen un código mucho más limpio que algunos proyectos PHP.

Ruby on Rails ofrece un entorno de trabajo integrado que permite probar la funcionalidad de la aplicación en cualquier momento, de tal forma que los errores pueden ser identificados y reparados desde el principio. Tecnologías de la web 2.0 como AJAX pueden ser implementadas con tan solo unas pocas líneas de código. Adicionalmente, Ruby y el framework Rails cuentan con una enorme y creciente comunidad, así como con una gran variedad de extensiones.

La innovadora filosofía de Rails, que consiste en buscar la mayor simplificación posible para el desarrollador, implementada desde un principio por Matsumoto con características como el sistema scaffolding, las convenciones fijas o la estructura MVC, ha servido de inspiración para muchos otros frameworks. Así, este enfoque es reconocible en frameworks PHP, como por ejemplo Symfony, CakePHP y en Zend Framework.

¿A quién está destinado RoR?

Ruby on Rails ofrece todo lo que un desarrollador necesita para crear aplicaciones web modernas: estructuras primarias para la realización de la interfaz, una conexión fácil de configurar para una base de datos SQL y la capacidad de utilizar tecnologías web como AJAX. Principios claros como “Don’t repeat yourself” y “Convention over configuration” proporcionan las bases de un código limpio, fácilmente manejable y adaptable que puede ser escrito rápidamente. Además, también permite realizar tus propias configuraciones, pues Ruby está diseñado para ofrecer al programador la libertad que necesita. Así, este framework es apto para principiantes y programadores experimentados que han trabajado hasta la fecha con otros lenguajes de script, aunque, en algunos casos, puede ser necesaria una mayor inversión de tiempo al comienzo.

Uno de los puntos más fuertes del framework Ruby es la forma en que el sistema de scoffing facilita la creación de prototipos planificados para proyectos web en muy poco tiempo. El entorno de prueba integrado te permite revisar tu aplicación durante la fase de desarrollo en busca de posibles errores. Ruby on Rails está equipado, incluso, para cubrir las necesidades de aplicaciones complejas. Con la ayuda de las llamadas extensiones RubyGems, en las que se incluye el mismo framework, es posible añadir fácilmente las interfaces, bibliotecas y características funcionales y visuales necesarias. Debido a que Ruby y RoR están sujetos a la licencia BSD, deberás contar únicamente con los costes necesarios para el alojamiento de tu proyecto web.

En ningún momento debes asumir que no necesitas ningún tipo de conocimientos sobre programación para implementar Ruby on Rails en tu proyecto. Este lenguaje no se encarga completamente de la totalidad del trabajo, como lo presupone la broma que mencionamos anteriormente. En términos de velocidad, quienes desarrollen aplicaciones con RoR no podrán mantenerse al día con sus principales competidores. El código solo se ejecutará cuando los usuarios accedan al respectivo contenido, por lo que la gestión de las solicitudes entrantes lleva, lógicamente, más tiempo que la de las líneas de código previamente compiladas.

Por último, recuerda que deberás prescindir del framework Rails si deseas organizar tu aplicación con CMS como Drupal, Joomla o WordPress. Estos últimos, así como otras tantas plataformas, se basan en PHP. Sin embargo, ya existen diferentes gestores de contenidos basados en Ruby on Rails, tales como Alchemy CMS. Las previsiones acerca de la difusión de RoR y de la posibilidad de poner en peligro el posicionamiento de líderes del mercado como PHP, Java y Phyton son difíciles de realizar. No obstante, las ventajas y la creciente popularidad del framework Ruby hablan por sí solos.