El problema principal
Al ver el buen soporte de las plataformas más modernas de programación tienen para la gestión de paquetes (piense gem
, npm
, pip
, etc.), ¿tiene sentido para diseñar una aplicación o sistema integrado por paquetes desarrollados internamente, con el fin de promover y crear una arquitectura de acoplamiento flexible?
Ejemplo
Un ejemplo de esto sería crear paquetes para el acceso a la base de datos, así como para la autenticación y otros componentes del sistema. Estos, por supuesto, también usan paquetes externos. Luego, su sistema importa y usa estos paquetes, en lugar de incluir su código dentro de su propia base de código.
Consideraciones
Para mí, parece que esto promovería el desacoplamiento del código y ayudaría a la mantenibilidad, casi de una manera basada en la Web frente a una aplicación de escritorio (las actualizaciones se aplican casi automáticamente, una base de código único para una funcionalidad única, etc.).
¿Parece esto un concepto de diseño racional y sensato? ¿Es esto realmente utilizado como una forma estándar de estructurar aplicaciones hoy en día?
fuente
Esta es una buena idea, en general. Tendrá que pensar en configurar un repositorio de paquetes interno (generalmente llamado "repositorio de artefactos" en el mundo de Java, o "servidor pypi" en el mundo de Python), de modo que mantenga allí los paquetes que no desea o no puede " t liberar como código abierto.
Como ha señalado @pdr, prepárese para tener su propia dependencia de infierno , donde un cambio en algún paquete requiere primero otro cambio en otro paquete, y esto significa no solo cambiar una línea de código, sino probarlo, posiblemente obtener los cambios aceptados, crear una versión y subir la versión al repositorio de paquetes mencionado anteriormente. Y luego cambiando lo que pretendías cambiar.
La única receta que puedo darle desde mi experiencia para intentar minimizar esto: no confíe únicamente en abstraer conceptos comunes de sus paquetes en un paquete "común" o "marco" . Esto puede parecer algo muy objetivo, pero conducirá a un paquete de monstruos que necesita cambios y lanzamientos frecuentes y posiblemente contradictorios. Mucho mejor, piense en las funcionalidades de su sistema y cree un paquete de ayuda para cada uno de ellos, como lo describió en su pregunta.
Aparte de eso, el principal beneficio que obtendrá es que sus aplicaciones están aisladas de (muchas) dependencias, por lo que puede intercambiarlas sin dolor.
fuente
common
paquete como una opción, pero, como usted dice, podría ver que se convierta en una decisión "razonable" en el futuro. Mi intención era más en la línea de componentes en lugar de código, por lo que idealmente no debería tener demasiados códigos que hacen lo mismo en diferentes paquetes porque están destinados a hacer cosas diferentes. Supongo que si hay puntos en común entre los paquetes, ese tipo de repetición no violaría los buenos principios de programación, ya que los proyectos están, por definición, separados.