Im Laufe der Jahre, in denen wir C # /. NET für eine Reihe von internen Projekten verwendet haben, ist eine Bibliothek organisch zu einem großen Haufen Material gewachsen. Es heißt "Util" und ich bin sicher, dass viele von Ihnen eines dieser Tiere in ihrer Karriere gesehen haben.
Viele Teile dieser Bibliothek sind sehr eigenständig und können in separate Projekte aufgeteilt werden (die wir gerne als Open Source-Version anbieten würden). Es gibt jedoch ein großes Problem, das gelöst werden muss, bevor diese als separate Bibliotheken veröffentlicht werden können. Grundsätzlich gibt es sehr viele Fälle von "optionalen Abhängigkeiten" zwischen diesen Bibliotheken.
Um dies besser zu erklären, ziehen Sie einige der Module in Betracht, die sich als eigenständige Bibliotheken eignen. CommandLineParser
dient zum Parsen von Befehlszeilen. XmlClassify
dient zum Serialisieren von Klassen nach XML. PostBuildCheck
Überprüft die kompilierte Assembly und meldet einen Kompilierungsfehler, wenn sie fehlschlägt. ConsoleColoredString
ist eine Bibliothek für farbige Stringliterale. Lingo
dient zum Übersetzen von Benutzeroberflächen.
Jede dieser Bibliotheken kann vollständig eigenständig verwendet werden. Wenn sie jedoch zusammen verwendet werden, stehen nützliche Zusatzfunktionen zur Verfügung. Beispielsweise können Sie beide CommandLineParser
und XmlClassify
die erforderlichen Funktionen für die Überprüfung nach der Erstellung bereitstellen PostBuildCheck
. Ebenso können mit der CommandLineParser
Option Dokumentationen unter Verwendung der farbigen String-Literale bereitgestellt werden ConsoleColoredString
, und es werden übersetzbare Dokumentationen über unterstützt Lingo
.
Der Hauptunterschied besteht also darin, dass dies optionale Funktionen sind . Sie können einen Befehlszeilenparser mit einfachen, nicht gefärbten Zeichenfolgen verwenden, ohne die Dokumentation zu übersetzen oder Prüfungen nach der Erstellung durchzuführen. Oder man könnte die Dokumentation übersetzbar, aber immer noch ungefärbt machen. Oder sowohl farbig als auch übersetzbar. Etc.
Wenn ich mir diese "Util" -Bibliothek ansehe, sehe ich, dass fast alle potenziell trennbaren Bibliotheken solche optionalen Funktionen haben, die sie an andere Bibliotheken binden. Wenn ich diese Bibliotheken tatsächlich als Abhängigkeiten benötige, ist dieses Zeug nicht wirklich entwirrt: Sie würden im Grunde immer noch alle Bibliotheken benötigen, wenn Sie nur eine verwenden möchten.
Gibt es etablierte Ansätze zum Verwalten solcher optionalen Abhängigkeiten in .NET?