Nel corso degli anni di utilizzo di C # /. NET per una serie di progetti interni, abbiamo avuto una libreria che si è trasformata organicamente in una grande quantità di cose. Si chiama "Util", e sono sicuro che molti di voi hanno visto una di queste bestie nelle loro carriere.
Molte parti di questa libreria sono molto autonome 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 molti casi di quelle che potrei definire "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 i controlli sull'assieme compilato e segnala un errore di compilazione in caso di errore. ConsoleColoredString
è una libreria per letterali di stringhe colorate. Lingo
serve per tradurre le interfacce utente.
Ognuna di queste librerie può essere utilizzata in modo completamente autonomo, ma se vengono utilizzate insieme ci sono utili funzioni extra. Ad esempio, entrambi CommandLineParser
ed XmlClassify
esporre la funzionalità di verifica post-build, che richiede PostBuildCheck
. Allo stesso modo, CommandLineParser
consente di fornire la documentazione delle opzioni usando i letterali stringa colorati, che richiedono ConsoleColoredString
e supporta la documentazione traducibile via Lingo
.
Quindi la distinzione chiave è che queste sono funzionalità opzionali . È possibile utilizzare un parser da riga di comando con stringhe semplici e non colorate, senza tradurre la documentazione o eseguire controlli post-build. Oppure si potrebbe rendere la documentazione traducibile ma ancora incolore. O sia colorato che traducibile. Eccetera.
Guardando attraverso questa libreria "Util", vedo che quasi tutte le librerie potenzialmente separabili hanno tali funzionalità opzionali che le legano ad altre librerie. Se dovessi effettivamente richiedere quelle librerie come dipendenze, questa mazzetta di cose non è affatto districata: avresti comunque bisogno di tutte le librerie se vuoi usarne solo una.
Esistono approcci consolidati alla gestione di tali dipendenze opzionali in .NET?