Przez lata używania C # / .NET do wielu wewnętrznych projektów, jedna biblioteka rozwinęła się organicznie w jeden wielki zbiór rzeczy. Nazywa się to „Util” i jestem pewien, że wielu z was widziało jedną z tych bestii w swojej karierze.
Wiele części tej biblioteki jest bardzo samodzielnych i można je podzielić na osobne projekty (które chcielibyśmy otworzyć). Jest jednak jeden poważny problem, który należy rozwiązać, zanim zostaną one wydane jako osobne biblioteki. Zasadniczo istnieje wiele przypadków tego, co mogę nazwać „opcjonalnymi zależnościami” między tymi bibliotekami.
Aby to lepiej wyjaśnić, rozważ niektóre moduły, które są dobrymi kandydatami do zostania samodzielnymi bibliotekami. CommandLineParsersłuży do analizowania wierszy poleceń. XmlClassifysłuży do szeregowania klas do formatu XML. PostBuildCheckwykonuje sprawdzanie skompilowanego zestawu i zgłasza błąd kompilacji, jeśli się nie powiedzie. ConsoleColoredStringto biblioteka kolorowych literałów łańcuchowych. Lingosłuży do tłumaczenia interfejsów użytkownika.
Każda z tych bibliotek może być używana całkowicie autonomicznie, ale jeśli są one używane razem, istnieją przydatne dodatkowe funkcje. Na przykład, zarówno CommandLineParseri XmlClassifynarazić funkcjonalność sprawdzania post-build, który wymaga PostBuildCheck. Podobnie, CommandLineParserpozwala na dostarczenie dokumentacji opcji przy użyciu kolorowych literałów łańcuchowych, co jest wymagane ConsoleColoredString, i obsługuje dokumentację do przetłumaczenia przez Lingo.
Dlatego kluczowym rozróżnieniem jest to, że są to funkcje opcjonalne . Można użyć parsera wiersza poleceń z prostymi, bezbarwnymi łańcuchami, bez tłumaczenia dokumentacji lub wykonywania jakichkolwiek kontroli po kompilacji. Lub można sprawić, by dokument był przetłumaczalny, ale nadal bezbarwny. Lub zarówno kolorowe, jak i do przetłumaczenia. Itp.
Przeglądając tę bibliotekę „Util”, widzę, że prawie wszystkie potencjalnie rozdzielne biblioteki mają takie opcjonalne funkcje, które wiążą je z innymi bibliotekami. Gdybym naprawdę potrzebował tych bibliotek jako zależności, to ten plik rzeczy nie jest wcale nieplątany: nadal potrzebujesz wszystkich bibliotek, jeśli chcesz użyć tylko jednej.
Czy istnieją ustalone podejścia do zarządzania takimi opcjonalnymi zależnościami w .NET?
