Nel corso degli anni di utilizzo di C # /. NET per un gruppo di progetti interni, abbiamo avuto una biblioteca crescere organicamente in un enorme mucchio di roba. Si chiama "Util", e sono sicuro che molti di voi hanno visto una di queste bestie nella propria carriera.
Molte parti di questa libreria sono molto indipendenti e potrebbero essere suddivise in progetti separati (che vorremmo open-source). Ma c'è un grosso problema che deve essere risolto prima che questi possano essere rilasciati come librerie separate. Fondamentalmente, ci sono un sacco e molti casi di ciò che potrei chiamare "dipendenze opzionali" tra queste librerie.
Per spiegarlo meglio, considera alcuni dei moduli che sono buoni candidati per diventare librerie autonome. CommandLineParser
è per l'analisi delle righe di comando. XmlClassify
è per serializzare le classi in XML. PostBuildCheck
esegue controlli sull'assieme compilato e segnala un errore di compilazione in caso di errore. ConsoleColoredString
è una libreria per valori letterali stringa colorati. Lingo
è per la traduzione di interfacce utente.
Ciascuna di queste librerie può essere utilizzata completamente stand-alone, ma se vengono utilizzati insieme, allora ci sono utili funzionalità extra da avere. Ad esempio, sia CommandLineParser
che XmlClassify
espongono la funzionalità di controllo post-build, che richiede PostBuildCheck
. Allo stesso modo, CommandLineParser
consente di fornire la documentazione delle opzioni utilizzando i valori letterali delle stringhe colorate, che richiedono ConsoleColoredString
, e supporta la documentazione traducibile tramite Lingo
.
Quindi la distinzione principale è che queste sono caratteristiche opzionali . Si può usare un parser da riga di comando con stringhe non colorate, senza tradurre la documentazione o eseguire controlli post-compilazione. O si potrebbe rendere la documentazione traducibile ma ancora incolore. O sia colorati che traducibili. Ecc.
Guardando attraverso questa libreria "Util", vedo che quasi tutte le librerie potenzialmente separabili hanno caratteristiche opzionali tali che li legano ad altre librerie. Se dovessi effettivamente richiedere quelle librerie come dipendenze, questo mazzetto di roba non è affatto districato: in pratica avresti ancora bisogno di tutte le librerie se vuoi usarne solo uno.
Esistono approcci consolidati per la gestione di tali dipendenze opzionali in .NET?