2012-03-27 11 views
8

Mi equipo ha estado desarrollando un conjunto de módulos en una aplicación Rails monolítica para uso interno. Los módulos son, por ejemplo, solicitud de permiso, información del personal, tareas/tareas, etc. Cada módulo tiene su propio propósito, pero de alguna manera está vinculado a información común, como el perfil del personal y la autenticación del usuario. Cada módulo tiene un desarrollador asignado y ellos asignan el código a la misma aplicación de Rails. Actualmente, es muy difícil mantener el código y la escala. Ahora, estoy investigando para descomponer la aplicación en pequeñas aplicaciones distribuidas y convertirlas en un ecosistema. Aquí está el concepto que estoy buscando:Cómo descomponer una aplicación de Rails en diferentes ecosistemas de aplicaciones pequeñas

  • Debe haber una aplicación maestra que mantenga las vistas de otras aplicaciones cliente. Mejor aún, actúa como una plataforma para que otras aplicaciones cliente se conecten a ella. El personal inicia sesión en esta aplicación maestra para acceder a la aplicación cliente.
  • La aplicación maestra debe mostrar las vistas de la aplicación del cliente utilizando AJAX u otras formas (no decididas).
  • Aunque, quiero descomponer las aplicaciones, pero cada aplicación aún debería poder consultar recursos/datos como el perfil de personal de otra aplicación cliente en el ecosistema.
  • En realidad, no he decidido sobre la interacción de cada aplicación. Pensando en nosotros RESTful (no decidido).
  • Debe ser compatible con el entorno de desarrollo donde cada desarrollador puede desarrollar cada aplicación de forma independiente. Por lo tanto, mantener su propio código en su propio repositorio git. Este es probablemente el objetivo principal de la descomposición de la aplicación en primer lugar.

Estoy leyendo Service-Oriented Design con el libro Ruby on Rails, pero parece que se centran en descomponer una aplicación en servicios pequeños y pequeños, mientras que yo quiero tener pequeñas aplicaciones diferentes. Me pregunto si hay otras formas de hacerlo.

Lo siento por una pregunta larga y pedir demasiado. Solo quiero saber si ha estado en la misma situación y puede guiarme a algunos artículos, comunidades, libros para que pueda continuar con mi investigación.

Respuesta

4

Ah las alegrías de la refactorización. Puede ser una danza difícil tratar de estructurar una aplicación en grupos lógicos para que las partes se puedan desacoplar.

Sugiero encarecidamente buscar en Engines, con el Engines vs Mountable siendo muy informativo. Esto le permite construir una aplicación mini Rails (también conocida como Engine) que puede empaquetarse como gema. Las gemas de Motor personalizadas se incluyen en una aplicación de Rails, que proporciona un conjunto completo de funcionalidades configurables (modelos, controladores, vistas, etc.).

La utilidad de la arquitectura orientada a servicios depende en gran medida del tipo de datos que está presionando y tirando. Habiendo dicho eso, Rails está realmente conectado para RESTful, por lo que obtienes mucho por el dinero con esa ruta.

+0

Usted dice "Las gemas del motor personalizadas se incluyen en una aplicación de Rails, proporcionando un conjunto completo de funciones configurables (modelos, controladores, vistas, etc.)". Pero, ¿pueden estas gemas del motor desplegarse por separado en el nivel físico? ¿Si es así, cómo? – richsinn

+1

@theSshow El motor de los Rails debe configurarse dentro de una aplicación Rails existente, no pueden ejecutarse de forma independiente. Permiten funciones que requieren que la funcionalidad de Rails se encapsule en una gema que se puede reutilizar. Por ejemplo, una joya que proporciona un foro estaría compuesta de controladores, vistas y modelos necesarios para ejecutar el foro. – mguymon

Cuestiones relacionadas