다년간의 사내 프로젝트에 C # /. NET을 사용하면서 한 라이브러리는 유기적으로 하나의 거대한 뭉치로 성장했습니다. 그것은 "유틸리티 (Util)"라고 불리며, 나는 많은 여러분이 당신의 경력에서이 짐승들 중 하나를 보았을 것입니다.
이 라이브러리의 많은 부분은 매우 독립적이며 별도의 프로젝트 (오픈 소스)로 분리 될 수 있습니다. 그러나 별도의 라이브러리로 릴리스하기 전에 해결해야 할 한 가지 중요한 문제가 있습니다. 기본적으로 이러한 라이브러리 사이에 "선택적 종속성" 이라고 부르는 사례가 많이 있습니다 .
이를 더 잘 설명하려면 독립형 라이브러리가 될 수있는 후보가되는 일부 모듈을 고려하십시오. CommandLineParser
명령 줄을 구문 분석하기위한 것입니다. XmlClassify
클래스를 XML로 직렬화하기위한 것입니다. PostBuildCheck
컴파일 된 어셈블리를 검사하고 실패하면 컴파일 오류를보고합니다. ConsoleColoredString
컬러 문자열 리터럴을위한 라이브러리입니다. Lingo
사용자 인터페이스를 번역하기위한 것입니다.
각 라이브러리는 완전히 독립형으로 사용할 수 있지만 함께 사용 하면 유용한 추가 기능이 있습니다. 예를 들어, 모두 CommandLineParser
와 XmlClassify
필요 빌드 후 검사 기능을 노출 PostBuildCheck
. 마찬가지로, CommandLineParser
옵션 문자열을 요구하는 컬러 문자열 리터럴을 사용하여 제공 할 수 있으며 ConsoleColoredString
를 통해 번역 가능한 문서를 지원합니다 Lingo
.
중요한 차이점은 이것들이 선택적 기능이라는 것 입니다. 문서를 번역하거나 빌드 후 검사를 수행하지 않고 무색의 일반 문자열로 명령 행 파서를 사용할 수 있습니다. 또는 문서를 번역 할 수는 있지만 여전히 채색 할 수는 없습니다. 또는 채색 및 번역이 가능합니다. 기타.
이 "유틸리티"라이브러리를 살펴보면 거의 모든 잠재적으로 분리 가능한 라이브러리에는 다른 라이브러리와 묶을 수있는 선택적 기능이 있습니다. 실제로 해당 라이브러리를 종속성으로 요구한다면이 뭉치가 전혀 풀리지 않습니다. 단 하나만 사용하려면 기본적으로 모든 라이브러리가 필요합니다.
.NET에서 이러한 선택적 종속성을 관리하는 기존의 접근 방식이 있습니까?