2011-07-21 20 views
11

Breaking a large rails app into smaller apps?¿Cómo puedo implementar Modularización en una aplicación de Rails?

Modularizing Rails applications

Best practice for structuring a 'large' Rails app

Tengo una pregunta rápida sobre la modularización en un gran rubí en los carriles de aplicaciones.

Configuración:

Estoy construyendo una aplicación central que almacena información acerca de las personas. También tengo varios 'módulos' que usan esa información de maneras muy diferentes. (por ejemplo, uno podría mostrar información sobre las personas, otro podría descubrir las conexiones y las similitudes entre ellos, etc.).

La pregunta:

¿Cómo modularizar esta aplicación eficiente?

respuestas potenciales:

Dado que los modelos de módulos de acciones y puntos de vista con la aplicación del núcleo (y) entre si que tiene sentido para mí para combinarlas en una sola aplicación. Sin embargo, a medida que la aplicación crezca, esto obviamente generará problemas. Esto me sugiere el nombre de los controladores de espacio y los modelos "How to organize controller in moderately large Rails application?" o el uso de los motores "Modularizing Rails applications".

Dado que los módulos están en desarrollo activo, es muy útil utilizar generadores de rieles en ellos, lo que parece hacer que usar Engines sea un dolor en el trasero. También parece que si bien los motores son totalmente compatibles desde el punto de vista de Rails, todavía parecen bastante hacky con respecto a la falta de soporte de generador y migraciones de bases de datos. ¿Alguien tiene experiencia en desarrollar motores con éxito? Parece que los motores serían una gran solución si tuvieras una aplicación en funcionamiento y quisieras convertirla en un complemento (es decir, copiar y pegar código) pero si la estás desarrollando activamente (cambiando modelos, etc.) sería difícil.

Lo último que he visto es utilizar varias aplicaciones y una base de datos. De esta manera parece un dolor real con las migraciones y manteniendo modelos rectos, etc. etc. Pero pensé que también tendría ideas sobre eso.

+0

Una buena manera de vincular a SO preguntas - no sabían que existía! – Zabba

+1

"Estoy construyendo una aplicación central que almacena información sobre [lo que sea]. También tengo varios 'módulos' que usan esa información de maneras muy diferentes". ¡Esto podría describir casi todas las aplicaciones de rieles jamás construidas! :-) ¿Puedes ser más específico con tus drivers? Al menos cuéntanos cuántas entidades crees que tendrás. – Rob

Respuesta

0
  • Una de las aplicaciones, una base de datos.
  • Comparta los modelos entre los módulos.
  • Espacio de nombre de sus controladores y vistas.
  • Prueba.
1
0

También puede utilizar Rack Middleware para manejar tareas específicas.

Para la mayor parte de su aplicación, los motores parecen ser la mejor solución, es algo que estoy buscando hacer también. Parece que puedes define generators en el motor con bastante facilidad.

0

Dependiendo de la estructura de los datos y los patrones de acceso, puede ser útil separar la aplicación en varias aplicaciones, y posiblemente, adicionalmente, proporcionar acceso a datos mediante API (RESTful).

En mi experiencia, esto permite las mejores estructuras cuando su (s) aplicación (es) crecen de tamaño medio a grande, y lo obliga a pensar en estructuras y separación de preocupaciones. El aumento de escala también suele ser más fácil.

1

No utilizaría motores. Los motores están destinados a ser utilizados para compartir la funcionalidad entre aplicaciones. Lo que quiere hacer es no compartir la funcionalidad sino organizarla.

Para organizar su código, puede hacer muchas cosas.

  • Use los espacios de nombres.
  • Mantenga sus controladores delgados.
  • Mantenga sus modelos delgados (Sí, sus modelos, consulte el siguiente punto)
  • Utilice el patrón de interacción de contexto de datos (DCI).
  • Utilice un marco de widgets como Apotomo o Celdas.
  • Escribir pruebas, para que pueda refactorizar.
  • Considere una arquitectura orientada a servicios (considere el diseño de la API Hypermedia) si la responsabilidad de su aplicación aumenta demasiado.

Andrzej tiene muy buenos artículos sobre DCI.

http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html

Cuestiones relacionadas