Pregunta

Estoy diseñando un conjunto de aplicaciones web que tienen la misma funcionalidad base. Es decir, todos sabrán cómo crear y operar en widgets. Las diferencias estarán en su público objetivo y cómo un usuario interactuará con un widget. Esencialmente, si estas aplicaciones se desarrollaran de forma independiente, habría mucho de esfuerzo duplicado.

Para simplificar esto, he pensado en dos soluciones. Me gustaría todos sus comentarios sobre los pros y los contras para cada solución, y que preferiría.

  1. "Plataforma": la idea es que hay una capa de servicio independiente, los servicios web. No sería un servicio web, sino simplemente un back-end para todas las aplicaciones. La plataforma hablaría con las aplicaciones a través de mensajes o serialización de objetos.

    Me gustaría escribir la plataforma con Java, pero la intención sería que las aplicaciones pudieran escribirse con cualquier marco web como Rails, Django, Flex o simplemente algo en Java.

    La plataforma abstraía la base de datos, por lo que toda la interacción con el back-end se realizaría a través de la plataforma. Un posible problema con esto es que la actualización de la plataforma implicará eliminar todas las aplicaciones. Pero al menos todas las aplicaciones serán consistentes con respecto al back-end.

    Me gusta cómo esto se corta horizontalmente, y que la aplicación realmente solo tiene que centrarse en el front-end, en lugar de preocuparse por cómo organizar el back-end.

  2. "Módulos": la idea es que solo escribo todo con Java y desarrollaré módulos que vivirían en sus propios frascos. Cada módulo representaría un módulo Guice y cada aplicación solo incluiría los módulos que desean y crearía sus propios inyectores.

    Este enfoque haría que cada aplicación sea completamente independiente entre sí, aparte de compartir una base de datos común. Por lo tanto, en teoría, sería mucho más fácil implementar una aplicación en un entorno diferente sin preocuparse por la plataforma. Estaría atrapado en un entorno de idioma, Java. Aunque, Jruby y Jython estarían disponibles. Entonces, tal vez eso no sea una gran preocupación.

    Además, preveo que sea más fácil personalizar una aplicación sin efectuar la plataforma. La única esta es que si actualizo un módulo, me gustaría volver a desplegar cada aplicación usando ese módulo. Sin embargo, esto sería fácil con la integración continua.

Gracias por tu tiempo.


Con respecto a la respuesta de Gary, he decidido adoptar un enfoque híbrido.

Voy a desarrollar una plataforma, que será el punto de acceso para las aplicaciones web a datos y servicios. Luego modularizaré la plataforma, pero todos los módulos permanecerán bajo un solo repositorio con una POM principal. Si bien podría mantenerlos a todos en un solo frasco, me gustaría la separación de clases para fines de desarrollo, para hacerme pensar a mí/otros antes de requerir que un módulo dependa de otro.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
scroll top