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. CommandLineParser
es para analizar líneas de comando. XmlClassify
es para serializar clases a XML. PostBuildCheck
realiza comprobaciones en el ensamblado compilado e informa un error de compilación si fallan. ConsoleColoredString
es una biblioteca para literales de cadena de colores. Lingo
es 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 CommandLineParser
y XmlClassify
exponen la funcionalidad de comprobación posterior a la compilación, que requiere PostBuildCheck
. Del mismo modo, CommandLineParser
permite 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?