Dans notre travail, nous avons plusieurs applications .net différentes qui partagent beaucoup de fonctionnalités de base. Nous avons construit ces applications en utilisant une architecture propre à n niveaux, mais nous avons atteint ce moment où nous nous rendons compte que nous avons ré-implémenté les mêmes fonctions plusieurs fois. Évidemment, cela viole DRY, et nous aimerions corriger cela. Nous utilisons déjà Nuget avec un certain succès pour le code de colle commun (câblage IoC, journalisation, paramètres), mais nous aimerions également partager nos couches de données et d'entreprise entre toutes nos applications. L'idée est que l'interface utilisateur ne traiterait que les parties de la couche métier dont elle a réellement besoin.
Cela semble être un problème simple au premier abord, mais le développement en cours pourrait fournir des écueils et nous ne savons pas comment procéder. Disons que nous créons notre couche d'entreprise unique pour les gouverner tous. Par souci de concision, je l'appellerai «Fondation». Nous portons nos applications pour utiliser la Fondation, et tout fonctionne à merveille. La Fondation est distribuée à des couches d'interface utilisateur légères via nuget, et nous avons l'air bien. Mais ensuite, nous commençons à ajouter des fonctionnalités à nos applications et nous rencontrons des problèmes.
Disons que nous travaillons sur le projet A et que nous ajoutons une nouvelle fonctionnalité qui nécessite des modifications de Foundation. Nous apportons les modifications à la fondation (Foundation-A) et les poussons vers le flux de pépites en tant que package instable. Le projet A obtient le dernier package nuget, et tout va bien. Pendant ce temps, un autre développeur travaille sur le projet B. Il obtient la dernière fondation du contrôle de code source, mais la prend dans une branche stable, de sorte qu'il ne comporte pas de modifications dans le projet A. Il fait des changements et crée Foundation-B. Et tout va bien. Mais ensuite, nous découvrons les fonctionnalités d'implémentation de Foundation-A et Foundation-B qui pourraient réellement partager du code, nous les combinons donc. Pendant ce temps, Foundation-C flotte là-bas avec ses propres changements. Finalement, Foundation-B est prêt pour la production, nous le poussons donc. Mais ensuite, nous devons mettre à jour la production A, B,
Cela semble pouvoir fonctionner, mais nous sommes inquiets de travailler avec différents schémas de base de données et de garder tout synchronisé entre les différentes branches du référentiel Foundation ainsi que les référentiels Project A, B et C. Il semble que cela prendra probablement beaucoup de travail manuel, ce qui ouvre la possibilité d'erreurs. Je voudrais que ce soit aussi automatisé que possible.
Voici la pile que nous utilisons: C #, TFS avec intégration continue, Nuget. Nos applications sont toutes de différents types d'applications ASP.NET. Nous sommes prêts à examiner différents SCM si cela facilite les choses.
Je cherche des moyens de garder Nuget sain d'esprit avec nos différentes branches de code source. Nous ne voulons pas pousser accidentellement le code de développement en production car nous référençons le mauvais paquet Nuget.