Sto lavorando su un sistema di microservizi in c # (.Net Core) dove per semplicità poniamo ogni microservizio nel proprio repository. Alcuni servizi sono molto generici e alcuni sono molto simili (anche se per domini diversi).
Naturalmente nel corso del tempo, man mano che il numero di servizi cresceva, abbiamo identificato molti codici e modelli riutilizzabili e li abbiamo trasferiti alle biblioteche.
Abbiamo spostato un sacco di codice per i nuget cercando di mantenerlo il più generico possibile, con ogni pacchetto di nuget che è anche il proprio repository, che ci ha dato una struttura approssimativamente così:
Utilities
||
\/
Bindings
||
\/
Complete Kit
Dove Utilities
è solo un insieme di classi utili per tutti i servizi; Bindings
è un nuget che contiene contratti per servizi che comunicano con altri (questi usano un po 'di codice condiviso da Utilities
) e Complete Kit
è una soluzione one-stop per cose molto specifiche del dominio che solo circa il 40% dei servizi utilizzati.
L'idea era che se scrivessi qualcosa di molto generico, potresti prendere solo Utilities
e poi il più specifico che ottieni, il pacchetto di livello superiore di cui hai bisogno.
Sfortunatamente, a causa di come funziona nuget (vedi questo bug che ho segnalato: link ), se dovessi aggiornare solo Utilities
per un progetto che importa anche Bindings
, quando Bindings
ottiene infine un% più elevato diUtilities
, l'aggiornamento di Bindings
fallisce perché il mio servizio importa Utilities
direttamente.
Ciò che questo significa per noi ora è che se voglio aggiornare qualcosa in Utilities
ho bisogno di modificare il codice in repository X (in realtà è più di 3, ma per semplicità d'esempio lo sto mantenendo), dove gli ultimi 2 stanno semplicemente aggiornando la versione delle dipendenze, ricostruiscono le cose 3 volte e aspettano che vengano pubblicate nel mio feed nuget VSTS.
Man mano che il numero di sviluppatori nel team è cresciuto, questo è diventato alquanto ingombrante, quindi stiamo prendendo in considerazione l'ipotesi di eliminare tutte queste librerie e passare a una sola percentuale di stile Complete Kit
.
Il fastidio di questa proposta è che questo ha un sacco di dipendenze di terze parti specifiche del dominio esterno che non hanno nulla a che fare con il 60% dei miei altri servizi.
Qualche suggerimento migliore su come organizzarlo?
EDIT Capisco che Nuget non mi consentirà di bypassare direttamente la catena di dipendenze. La domanda è davvero: come organizzo il codice in modo tale che io possa:
- aggiorna solo le classi (codice) di cui ho bisogno
- consente al servizio generico di NON importare tutte le dipendenze del codice di altri domini
- consente l'accesso al codice specifico del dominio alle stesse classi da (a)