Nel nostro lavoro, abbiamo diverse applicazioni .NET che condividono molte funzionalità di base. Abbiamo creato queste applicazioni utilizzando un'architettura pulita a più livelli, ma abbiamo colto il momento in cui ci rendiamo conto che abbiamo implementato nuovamente le stesse funzioni diverse volte. Ovviamente questo viola DRY e vorremmo correggerlo. Stiamo già utilizzando Nuget con un certo successo per il codice comune della colla (cablaggio di IoC, registrazione, impostazioni), ma vorremmo anche condividere i nostri dati e livelli aziendali tra tutte le nostre applicazioni. L'idea è che l'interfaccia utente si occupi solo delle parti del livello aziendale di cui ha effettivamente bisogno.
All'inizio questo sembra un problema immediato, ma lo sviluppo in corso potrebbe fornire alcune insidie e non siamo sicuri su come procedere. Diciamo che facciamo il nostro One Business Layer per dominarli tutti. Per brevità, lo chiamerò "Fondazione". Portiamo le nostre applicazioni per usare la Fondazione e tutto funziona alla grande. La Fondazione è distribuita per illuminare i livelli dell'interfaccia utente tramite nuget e stiamo andando bene. Ma poi iniziamo ad aggiungere funzionalità alle nostre applicazioni e ci imbattiamo in problemi.
Diciamo che stiamo lavorando al Progetto A e aggiungiamo una nuova funzionalità che richiede modifiche a Foundation. Apportiamo le modifiche alla fondazione (Foundation-A) e le inviamo al feed di nuget come pacchetto instabile. Il progetto A ottiene l'ultimo pacchetto di nuget e tutto va bene. Nel frattempo, un altro sviluppatore sta lavorando al Progetto B. Ottiene l'ultima base dal controllo del codice sorgente, ma la prende da un ramo stabile, in modo che non abbia modifiche al Progetto A. Apporta modifiche e crea Foundation-B. E tutto va bene. Ma poi scopriamo che le funzionalità di implementazione di Foundation-A e Foundation-B che potrebbero effettivamente condividere il codice, quindi le combiniamo. Nel frattempo, la Fondazione C sta fluttuando là fuori con le sue stesse modifiche. Alla fine, Foundation-B è pronto per la produzione, quindi lo spingiamo fuori. Ma poi dobbiamo aggiornare la produzione A, B, & C con le nuove fondamenta, quindi aggiorniamo i pacchetti di nuget e lo distribuiamo (finché non si interrompe nulla).
Sembra che potrebbe funzionare, ma siamo preoccupati di lavorare con diversi schemi di database e di mantenere tutto sincronizzato tra i vari rami del repository di Foundation così come i repository Project A, B e C. Sembra che probabilmente richiederà molto lavoro manuale, il che apre la possibilità di errori. Mi piacerebbe che fosse il più automatico possibile.
Ecco lo stack che stiamo utilizzando: C #, TFS con integrazione continua, Nuget. Le nostre applicazioni sono tutti i vari tipi di applicazioni ASP.NET. Siamo disposti a guardare diversi SCM se renderà le cose più facili.
Sto cercando modi per mantenere Nuget sano con i nostri diversi rami del codice sorgente. Non vogliamo inserire accidentalmente il codice di sviluppo in produzione perché facciamo riferimento al pacchetto Nuget sbagliato.