En nuestro trabajo, tenemos varias aplicaciones .net diferentes que comparten muchas funciones básicas. Creamos estas aplicaciones utilizando una arquitectura limpia de n niveles, pero llegamos a ese momento en el que nos damos cuenta de que hemos vuelto a implementar las mismas funciones varias veces. Obviamente, esto viola DRY, y nos gustaría corregir eso. Ya estamos usando Nuget con cierto éxito para el código de pegamento común (cableado de IoC, registro, configuración), pero también nos gustaría compartir nuestros datos y capas comerciales entre todas nuestras aplicaciones. La idea es que la interfaz de usuario solo se ocupe de las partes de la capa empresarial que realmente necesita.
Esto parece un problema directo al principio, pero el desarrollo continuo podría proporcionar algunas dificultades y no estamos seguros de cómo proceder. Supongamos que creamos nuestra capa empresarial única para gobernarlos a todos. Por brevedad, lo llamaré "Fundación". Portamos nuestras aplicaciones para usar la Fundación, y todo funciona muy bien. La Fundación se distribuye a capas de interfaz de usuario ligeras a través de nuget, y nos vemos bien. Pero luego comenzamos a agregar funciones a nuestras aplicaciones y nos encontramos con problemas.
Digamos que estamos trabajando en el Proyecto A y agregamos una nueva característica que requiere cambios en Foundation. Realizamos los cambios en la base (Foundation-A) y los enviamos al feed nuget como un paquete inestable. El Proyecto A obtiene el último paquete Nuget, y todo está bien. Mientras tanto, otro desarrollador está trabajando en el Proyecto B. Obtiene la última Fundación del control de código fuente, pero la toma de una rama estable, para que no tenga cambios en el Proyecto A. Él hace cambios y creó la Fundación B. Y todo esta bien. Pero luego descubrimos que la funcionalidad de implementación de Foundation-A y Foundation-B podría compartir código, por lo que las combinamos. Mientras tanto, Foundation-C está flotando por ahí con sus propios cambios. Finalmente, Foundation-B está lista para la producción, por lo que la sacamos. Pero luego necesitamos actualizar la producción A, B,
Parece que podría funcionar, pero nos preocupa trabajar con diferentes esquemas de bases de datos y mantener todo sincronizado entre las diversas ramas del repositorio de Foundation y los repositorios del Proyecto A, B y C. Parece que probablemente tomará mucho trabajo manual, lo que abre la posibilidad de errores. Me gustaría que esto sea lo más automatizado posible.
Aquí está la pila que estamos usando: C #, TFS con integración continua, Nuget. Nuestras aplicaciones son todos los diversos tipos de aplicaciones ASP.NET. Estamos dispuestos a ver diferentes SCM si eso facilitará las cosas.
Estoy buscando formas de mantener a Nuget cuerdo con nuestras diferentes ramas de código fuente. No queremos introducir accidentalmente el código de desarrollo en producción porque hacemos referencia al paquete Nuget incorrecto.