Dipendenze strutturali per il core .Net nei pacchetti Nuget

0

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)
posta zaitsman 07.09.2018 - 06:35
fonte

0 risposte

Leggi altre domande sui tag