Cómo construir aplicaciones web completamente modulares [cerrado]

34

En los próximos meses vamos a comenzar un proyecto donde tomaremos un sistema que hemos construido para un cliente (v1) y lo reconstruiremos desde cero. Nuestro objetivo con v2 es hacerlo modular, para que este cliente específico tenga su propio conjunto de módulos que use, luego otro cliente puede usar un conjunto diferente de módulos por completo. El truco aquí es que la Compañía A podría tener una serie de módulos de pago y usuario que cambian la forma en que funciona ese sistema. La empresa B podría seguir el procedimiento de pago estándar, pero personalizar cómo se navegan los productos.

¿Cuáles son algunos buenos enfoques para la arquitectura de la aplicación cuando se está creando una aplicación desde cero que desea tener Corecompartida entre todos los clientes y al mismo tiempo mantener la flexibilidad para que cualquier cosa sea modificada específicamente para un cliente?

He visto ganchos de CodeIgniter y no creo que sea una buena solución, ya que podría terminar con 250 ganchos y todavía no es lo suficientemente flexible. ¿Cuáles son algunas otras soluciones? Lo ideal es que no necesitaremos para dibujar una raya en la arena.

Webnet
fuente

Respuestas:

26

Para lograr una modularidad altamente organizada y desacoplada, puede seguir el patrón arquitectónico MVC jerárquico , a veces conocido como Presentación-abstracción-control (aunque no son estrictamente el mismo patrón). Kohana , aleación , Fluidez y FuelPHP apoyo HMVC forma nativa * y el enfoque HMVC de Kohana se discute en aplicaciones de escala Web con HMVC y Optimización Web HMVC Las solicitudes de rendimiento , por Sam de Freyssinet .

Lamentablemente CodeIgniter no admite HMVC de forma nativa. He creado mis propias bibliotecas para proporcionar algún tipo de soporte HMVC en CodeIgniter, inspirándome en codeigniter-modular-extensiones-hmvc de wiredesignz . Hay una muy buena introducción al artículo de HMVC en nettus +, que analiza CodeIgniter y la extensión de wiredesignz. La siguiente imagen y cita son de ese tutorial:

ingrese la descripción de la imagen aquí

Cada tríada funciona independientemente una de la otra. Una tríada puede solicitar acceso a otra tríada a través de sus controladores. Ambos puntos permiten que la aplicación se distribuya en varias ubicaciones, si es necesario. Además, la estratificación de las triadas MVC permite un desarrollo de aplicaciones más profundo y robusto. Esto lleva a varias ventajas que nos lleva a nuestro siguiente punto.

Finalmente, está en el camino correcto con los ganchos, incluso si adopta una arquitectura HMVC, habrá algunos problemas que deberá resolver con los ganchos, dependiendo de su implementación y el nivel de automatización que esté buscando. . Un buen uso de los ganchos sería un pre_controllergancho que se aseguraría de que todas las dependencias de los módulos instalados estén presentes, por ejemplo.

* Puede haber otros que no conozco.

Yannis
fuente
1
¿ASP.NET MVC tiene soporte para esto?
Robert Harvey
@RobertHarvey No tengo idea ...
Yannis
@Robert Harvey Para mí, esto parece más un patrón que un marco. Tal vez me falta algo, pero no puedo ver por qué no puedo hacer esto con la herencia en ASP.NET MVC.
Jeremy
3
@Jeremy: Las vistas se vuelven difíciles, especialmente si quieres reutilizar partes de las vistas. Parece intrigante, pero me resulta difícil visualizarlo a nivel de tuercas y tornillos.
Robert Harvey
En el diagrama anterior, parece que las vistas de nivel superior se componen de vistas más pequeñas ubicadas más abajo en la jerarquía. Que ya se puede hacer hasta cierto punto conRenderAction()
Robert Harvey
5

No soy un tipo PHP, pero en el lado del script java si va a tener muchos módulos que le gustaría mantener lo más independientes posible, hay varios sistemas para esto, como RequireJS , que tienen un script java módulos que declaran dependencias de otros módulos, y el marco se asegura de que se carguen cuando sea necesario.

Los diversos marcos varían según la forma en que se declaran las dependencias, la cantidad de manejo de dependencias que se realiza como un paso de compilación en el servidor, en la carga de la página o dinámicamente a pedido, y en cuánto tiene que cambiar la forma en que escribe su java- guión.

Estos marcos no se aplican tanto (o tal vez en absoluto) si el marco del lado del servidor maneja esto o genera su script java por usted, pero es posible que desee que su script java sea independiente del marco del lado del servidor.

Si no tiene demasiado java-script pero desea cierta modularidad, siempre puede apegarse a las funciones de auto llamada anónimas que manejan las dependencias ordenando primero las etiquetas del script con las dependencias, y haciéndose referencia mutuamente registrándose con un solo objeto en El espacio de nombres global. Eso al menos los hace casi modulares y no cuesta mucho implementarlos.

psr
fuente
0

Aquí hay algunas instrucciones sobre cómo hacer un diseño modular: https://class.coursera.org/saas/lecture/preview/9

También esto: " SOA se puede ver en un continuo, desde conceptos más antiguos de computación distribuida y programación modular , a través de SOA, y hasta las prácticas actuales de mashups, SaaS , ..."

La organización del código HMVC por sí sola no necesariamente conduce a la modularidad.

Goce Ribeski
fuente