Una cuestión de twigs de larga duración y disruptivas

Estamos a punto de comenzar a crear un prototipo de una nueva aplicación que compartirá algunos ensambles de infraestructura existentes con una aplicación existente, y también involucrará un subset significativo del model de dominio existente.

Es probable que algunas partes del model de dominio experimenten algunos cambios serios para esta nueva aplicación, y el final de todo esto, una vez que la nueva aplicación se haya especificado completamente y esté list para su lanzamiento, es que nos gustaría volver a unificar los models del dos aplicaciones (además de compartir una database, funcionalidad de enlace, etc.), pero durante el desarrollo, creación de prototypes, etc., utilizaremos una database separada para poder cambiar las cosas sin preocuparnos por el impacto en el desarrollo o uso de la aplicación existente. Como se trata de un prototipo, habrá una window bastante larga durante la cual se pueden producir cambios serios o realizar reconstrucciones como experimentos de gestión de productos con diferentes flujos de trabajo, diferentes bases de clientes son inspeccionadas, y tratamos de mantener el ritmo.

Ya hemos hecho una sucursal de Subversion, para no afectar el desarrollo simultáneo en la aplicación madura, y estamos jugando con 2 posibles forms de avanzar con esto:

  1. Use la twig svn como el único mecanismo de separación. Realice los cambios en los models de dominio existentes y evalúe su impacto en la aplicación existente (y realice los cambios necesarios en ProjectA) cuando establezcamos que nuestra twig lateral de larga ejecución sea lo suficientemente estable como para reingresar al enlace troncal.

  2. "Tenedor" el código compartido (temporalmente): Copie ProjectA.Entities a NewProject.Entities y trate todo el código NewProject como autónomo. Cuando todas las perturbaciones en torno al model se hayan apagado y nos sintamos satisfechos, vuelva a integrar manualmente los cambios (tan granulares o extensivos según corresponda) en ProjectA.Entities, actualizando ProjectA para usar los models mejorados en cada paso (esto puede tomar colocar antes o después de que se haya producido la fusión de subversión). La fusión de subversión no manejará la recombinación de ninguno de los grandes cambios aquí. Nota: el método "tenedor" solo se aplica al código que vemos cambios significativos almacenados, y cuya modificación romperá ProjectA – infraestructura compartida cosas por ejemplo, que simplemente modificaríamos en el lugar (en nuestra twig) y dejaremos que la combinación se resuelva .

  3. El desarrollo es difícil, ir de compras.

Naturalmente, después de no llegar a un acuerdo, lo estamos entregando al oracle del poder que es TAN. ¿Alguna experiencia con alguno de estos methods, puntos de dolor a tener en count, algo completamente nuevo?

Yo preferiría 2. porque para el esfuerzo de desarrollo a largo ploop con un resultado final bastante diferente de la base del código original, a menudo veía la "fase de reintegración" como:

  • tomando la mayor parte del time el código exacto desarrollado en el nuevo proyecto (es decir, no hay fusión real involucrada en su mayor parte, solo una copy simple)
  • uso limitado de la historia (es decir, ya no necesito todos los compromisos intermedios realizados en el nuevo proyecto al reintegrarlo en el proyecto original).