es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mejores prácticas – compartir el código de la capa de servicio y repositorio de Spring-boot entre aplicaciones.

Necesito algunas recomendaciones de mejores prácticas para un requisito clásico relacionado con la modularización de una aplicación Springboot basada en capas.

Algunos antecedentes:
– Proyecto de tamaño pequeño a mediano de Spring boot con menos de 10 desarrolladores
– 2 aplicaciones de Spring-boot diferentes comparten servicios, capa de repositorio y también modelos compartidos.
– Demasiado tarde para seguir un enfoque de microservicios con un Modelo/Controlador/Servicio/Repositorio completo por API.
– Actualmente solo hay una aplicación web que expone las APIs para una aplicación frontend.
– El requisito es agregar un nuevo conjunto de API que se utilizan para la integración B2B, por lo que los formatos de solicitud/respuesta serán bastante diferentes de las API ya disponibles, es decir, /webapi/v1/orders para el cliente frontend y /b2b/v1/orders deberá devolver un formato de respuesta diferente.
– La capa de servicio y repositorio junto con los modelos deben compartirse entre las dos aplicaciones, por lo que se identificaron 3 módulos similares a cómo se explica en https://stackoverflow.com/a/50352532/907032

— Aplicación principal
— Webapi (tiene dependencia de common, empaquetado jar)
— B2b (tiene dependencia de common, empaquetado jar)
— Common (empaquetado jar)

  • Las dos aplicaciones deben implementarse por separado y también separarse desde una perspectiva de CICD para no construir todos los submódulos cada vez (un cambio en el controlador de b2b no debería afectar a common/webapi).
  • Un cambio en el módulo común que solo se requiere para el último módulo b2b, preferiblemente no debería disparar una construcción e implementación de webapi. Es decir, webapi utiliza common-1.01 y el módulo b2b utiliza common-1.02. Se entiende que la nueva versión common-1.02 no debe romper ninguna función de common-1.01, pero se trata de ahorrar una construcción e implementación innecesarias para ese módulo hasta que sea necesario, si eso tiene sentido.

El desafío
– ¿Deberían definirse los módulos en el mismo repositorio o en 3 repositorios diferentes?
– Todas las conversaciones sobre mono vs multi repositorio se refieren a si mantener todos los proyectos diferentes en el mismo o no, pero aquí, como puede ver, estos son módulos que están relacionados entre sí.
– Si definimos estos como submódulos en el mismo repositorio, ¿cómo se maneja la version del módulo común? Si siempre se dispara una construcción de los tres submódulos, ¿tenemos alguna ventaja en modularizar el código?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Recomendaciones de buenas prácticas para modularizar aplicaciones Spring Boot basadas en capas

    De acuerdo con la información de fondo, a continuación, se presentan algunas recomendaciones para modularizar las aplicaciones Spring Boot:

    1. Mantener los módulos en el mismo repositorio facilitará el mantenimiento y la gestión del código. Sin embargo, se recomienda utilizar submódulos de Git o Maven multi-módulos para gestionar los módulos en el mismo repositorio.
    2. Para la versión, se recomienda seguir la estrategia de versionado semántico en la que cada módulo tiene su propio número de versión. En este caso, el módulo común puede tener la versión 1.01 y la versión 1.02 para los módulos Webapi y b2b, respectivamente.

    3. Se recomienda utilizar Maven para gestionar el proceso de creación y definir las dependencias entre los módulos. Maven puede ayudar a gestionar el proceso de creación de manera eficiente y construir selectivamente solo los módulos que se hayan modificado.

    4. Para implementar y gestionar los módulos por separado, se recomienda utilizar tecnologías de contenerización como Docker o Kubernetes. Cada módulo puede ser empaquetado como un contenedor y desplegado por separado con su propia configuración.

    5. Para gestionar CICD, se recomienda definir tuberías separadas para cada módulo en una herramienta de CI/CD como Jenkins o GitLab. Cada tubería puede ser activada por separado cuando se produce un cambio en el módulo correspondiente.

    6. Es importante definir limitaciones y APIs claras entre los módulos para garantizar un acoplamiento suelto y una mayor flexibilidad.

    Siguiendo estas buenas prácticas, modularizar las aplicaciones Spring Boot basadas en capas puede mejorar el mantenimiento, la escalabilidad y la agilidad de la aplicación.

Comments are closed.