A lo largo de los años de usar C # / .NET para un montón de proyectos internos, hemos tenido una biblioteca que creció orgánicamente en un gran fajo de cosas. Se llama "Util", y estoy seguro de que muchos de ustedes han visto una de estas bestias en sus carreras.
Muchas partes de esta biblioteca son muy independientes y podrían dividirse en proyectos separados (que nos gustaría abrir en código fuente). Pero hay un problema importante que debe resolverse antes de que puedan lanzarse como bibliotecas separadas. Básicamente, hay muchos casos de lo que podría llamar "dependencias opcionales" entre estas bibliotecas.
Para explicar esto mejor, considere algunos de los módulos que son buenos candidatos para convertirse en bibliotecas independientes. CommandLineParseres para analizar líneas de comando. XmlClassifyes para serializar clases a XML. PostBuildCheckrealiza comprobaciones en el ensamblado compilado e informa un error de compilación si fallan. ConsoleColoredStringes una biblioteca para literales de cadena de colores. Lingoes para traducir interfaces de usuario.
Cada una de esas bibliotecas se puede usar de manera completamente independiente, pero si se usan juntas, entonces hay características adicionales útiles que se pueden tener. Por ejemplo, ambos CommandLineParsery XmlClassifyexponen la funcionalidad de comprobación posterior a la compilación, que requiere PostBuildCheck. Del mismo modo, CommandLineParserpermite que se proporcione la documentación de la opción utilizando los literales de cadena de color, lo que requiere ConsoleColoredString, y admite documentación traducible a través de Lingo.
Entonces, la distinción clave es que estas son características opcionales . Se puede usar un analizador de línea de comandos con cadenas simples y sin color, sin traducir la documentación ni realizar ninguna comprobación posterior a la compilación. O uno podría hacer que la documentación sea traducible pero aún sin color. O tanto de color como traducible. Etc.
Al mirar a través de esta biblioteca "Util", veo que casi todas las bibliotecas potencialmente separables tienen características opcionales que las vinculan a otras bibliotecas. Si realmente requiriera esas bibliotecas como dependencias, este fajo de cosas no está realmente desenredado en absoluto: básicamente necesitaría todas las bibliotecas si desea usar solo una.
¿Existen enfoques establecidos para administrar tales dependencias opcionales en .NET?
