Saltar al contenido

Ruby on Rails: la forma modular

En este artículo, quiero compartir con ustedes una forma diferente de construir aplicaciones Ruby on Rails. Lo llamo Modular Way, y la idea principal detrás de ese nombre es separar tu aplicación en módulos pequeños y reutilizables gracias a los motores Rails.

Si ha estado trabajando con Ruby on Rails, sabe lo fácil que es crear una aplicación básica gracias al concepto de ‘convenciones sobre configuración’. Sin embargo, después de un tiempo, por lo general ya no es suficiente. La aplicación rápida y sencilla que se creó para sacar un MVP lo antes posible no está a la altura de la tarea y requiere cambios.

Luego, la gente comienza a pensar en formas de optimizar su aplicación.

Pero es posible que esto no sea realmente necesario.

Digamos que la aplicación, sea lo que sea, está funcionando bien en su nicho. No es el nuevo Facebook o Twitter, pero los ingresos están ahí y a la gente le gusta el producto. La buena noticia es que el concepto es bueno y podría reutilizarse en otras industrias; sin embargo, no todas las industrias tienen las mismas necesidades.

¿Qué tal si separamos el código en componentes más pequeños? Podríamos conectar o desconectar cualquier función con esta solución. Luego podríamos usar esos componentes en diferentes aplicaciones. La parte complicada es cómo terminamos separando el código fuente. La mejor manera de hacer esto es encapsular cada característica en su propio módulo.

Probablemente suene bastante abstracto. Profundicemos y aprendamos más sobre las aplicaciones modulares.

1. Aplicaciones monolíticas

Una aplicación monolítica, como su nombre lo dice todo, es una aplicación construida en un bloque. Básicamente, como un monolito.

Cuando genera una aplicación Ruby on Rails, es una aplicación monolítica. La mayoría de las aplicaciones web son en realidad monolíticas. Y eso está totalmente bien, ¡no me malinterpretes! Me encantan las aplicaciones monolíticas y sigo creando aplicaciones Rails regulares todo el tiempo. Como verá pronto, la creación de aplicaciones modulares no reemplaza sus aplicaciones diarias.

Las aplicaciones monolíticas son excelentes porque puede concentrarse en publicar su aplicación lo más rápido posible. Una vez que su aplicación esté lista, puede comenzar a agregar más y más funciones. Las cosas pueden complicarse y es posible que tenga que probar un enfoque diferente algún día.

2. Aplicaciones modulares

Las aplicaciones modulares ofrecen una forma diferente de trabajar en su aplicación. Dado que se está enfocando en construir pequeños componentes reutilizables en lugar de una gran aplicación, agregar o eliminar funciones se vuelve más fácil.

Al tener un conjunto de componentes, podríamos tener múltiples aplicaciones que compartan algunas características pero que también tengan sus propias especificidades.

A continuación, se muestran algunos tipos de aplicaciones que podrían beneficiarse de este enfoque:

Y aquí hay algunos grandes beneficios que vienen con la modularidad:

Lo bueno de las aplicaciones modulares es que básicamente puedes abrir tu aplicación al mundo y comenzar a permitir que contribuyentes externos creen complementos. ¡El sistema ya está ahí y lo has estado usando!

Comiendo tu propia comida para perros, ordenada.

Incluso si no está planeando hacer el próximo WordPress con sus ‘millones’ de complementos, tener características aisladas significa que su equipo puede trabajar en algo mientras otro equipo trabaja en algo completamente diferente. ¿La mejor parte? ¡Nadie se está pisoteando!

Las aplicaciones modulares son realmente sorprendentes si eso es lo que necesita, pero tienen dificultades que debe conocer. En primer lugar, no son aptos para principiantes. Ya debería tener un buen conocimiento de Ruby y Ruby on Rails antes de intentar construir una aplicación modular. También es más difícil trabajar con este tipo de aplicación, ya que está administrando un conjunto de módulos en lugar de una sola aplicación.

3. Una forma de implementarlo

Hablemos de un estudio de caso simple para un tipo específico de aplicación: una plataforma de preguntas / respuestas.

¡Tú sabes de qué estoy hablando! StackExchange y su enorme red de sitios web, por ejemplo. Yahoo Answers y Quora también son buenos ejemplos. Básicamente, la gente puede hacer preguntas y cualquiera puede responder. Suficientemente simple.

¿Y si quisiera crear la próxima generación de preguntas y respuestas? Su audiencia está compuesta por entusiastas del aire libre: cazadores, campistas, excursionistas, etc. Primero, crea una aplicación de preguntas y respuestas exclusivamente para cazadores. Desea obtener un MVP rápidamente, por lo que crea una aplicación Ruby on Rails y en unas pocas semanas tiene algo listo. Lo inicias y comienzas a recibir algo de tráfico.

Entonces empiezas a pensar en el resto de tu audiencia. ¡Tienen preguntas y también necesitan respuestas! Entonces, ¿Qué haces? ¿Solo agregarlo a la misma aplicación? Crea algunas categorías, cambia colores y listo.

Luego, los excursionistas comienzan a pedir una nueva característica que no tiene nada que ver con la caza. A partir de ese momento tienes dos opciones.

Agrega todo a la misma aplicación. En 2 años, la aplicación será un desastre y el código específico para cada grupo será cada vez más difícil de mantener.

O adopta el enfoque modular. Extrae los componentes de su aplicación en módulos que puede reutilizar en otras aplicaciones. Luego, crea módulos personalizados para las aplicaciones que necesitan características específicas. ¡Problema resuelto!

Obviamente, recomiendo el segundo enfoque. Es una forma mucho más limpia de manejar este escenario. Cuando tiene 10 sitios web de Q / A diferentes con diferentes características encapsuladas, todo lo que tiene que hacer para crear uno nuevo es ir de compras a su tienda privada de módulos.

Para una aplicación de Q / A, podríamos tener los siguientes módulos, por ejemplo.

Módulos compartidos

Core (aplicación minimalista que solo maneja usuarios)

Q / A (sistema de preguntas / respuestas)

Módulos Hikers Q / A

Módulo de intercambio de rutas para mostrar los mejores lugares para hacer senderismo.

Con esos 5 módulos podrías tener dos aplicaciones diferentes que se adapten a las necesidades de cada audiencia.

4. Rails motores como gemas

Hablemos sobre cómo crear realmente una aplicación modular con Ruby on Rails. No vamos a entrar demasiado en el aspecto técnico, pero quiero compartir contigo las herramientas que puedes utilizar.

La idea es empaquetar sus módulos como gemas Ruby. Dado que vamos a encapsular entidades específicas de Rails (modelos, controladores,…) en nuestros módulos, necesitamos usar motores Rails. ¡Entonces podemos empaquetarlos como gemas!

Crear un motor es tan simple como esto:

Entonces todo lo que tienes que hacer es montar este motor en tu aplicación Rails.

Tendrá que agregar algún código a su motor después de esto. Si sabe cómo crear una aplicación Ruby on Rails, sabe cómo construir un motor. Comparten mucho y una aplicación Rails es solo un motor encendido.

Una vez que esté satisfecho con sus motores, puede comenzar a empaquetarlos como gemas. Utilizando gem build hacer esto es sencillo.

Luego, puede enviarlo a Rubygems si no le importa que sea público, de lo contrario, necesitará un servidor de gemas privado. La solución en ese caso puede ser Gemfury si tienes el dinero o el gran Geminabox que te permite configurar tu propio gemserver privado en cualquier lugar.

Fuente de imagen: Github

Si decide utilizar Geminabox, tendrá un servidor de gemas privado listo en unos 10 minutos. Todo lo que necesita hacer después de esto es especificar su gemserver como fuente en un Gemfile y definir las gemas que desea obtener de él.

¡Listo para usar!

Las aplicaciones modulares pueden ser realmente increíbles si las necesita. Sin embargo, no son la solución a todos los problemas. Necesita evaluar y ver si la forma modular es la correcta para usted.

Las aplicaciones modulares también pueden ser un fastidio. Tener que administrar un conjunto de módulos en lugar de una sola aplicación agrega pasos adicionales al realizar cambios de código. Tendrá que impulsar cada uno de sus módulos de forma independiente antes de poder impulsar su aplicación modular, por ejemplo.

6. Más información

Si las aplicaciones modulares suenan interesantes, ¿por qué no consulta el libro que escribí: Modular Rails?

Este contenido se publicó originalmente aquí.