我们有几个常见的库(C#但我认为这不是平台或语言特定的),我们称它们为A,B和C.库A引用了B和C,库B有一个引用第三方DLL,并且库C是独立的。三个独立项目背后的想法是,每个库都有不同的功能,但是随着时间的推移,库A几乎成为大多数每个客户端应用程序引用的“全部捕获”通用库。只有少数应用程序在没有A的情况下引用B和/或C。为什么我不应该有一个单一的单片实用程序库?
我们正试图改进我们的源代码控制约定,我们正试图做的一件事是正确标记和释放这些库DLL,因此客户端项目文件可以指向代码的静态版本而不是始终 - 改变主干。这证明有点复杂 - 例如,引用A和B的客户端项目.A本身引用B,因此在技术上有两个来自客户端项目的对B的引用。
因此,显而易见的事情似乎只是将所有内容组合到一个具有良好组织的名称空间的公共/实用程序库中。正如我所说的,几乎每个客户端应用程序都引用这些库中的一个,那么谁在乎呢?这样做不会引入任何第三方依赖关系的不良情况,并且我们所有的目标机器都是内部的,并且保持大致相同的环境/软件配置。
虽然这似乎太容易解决,所以我想我至少会得到第二个意见。另一种方法可以是使用GAC并强制签署/版本。我在这里错过了什么?
这取决于平台。 NodeJS使用组件化作为优势。通过独立维护每个模块的依赖关系树,每个模块都可以使用它最初设计的任何版本的库。通过完全忽略整合问题,'依赖地狱'成为一个无关紧要的问题。随着新功能的添加,只需要新功能的依赖项需要更新。 – 2013-12-16 22:30:01
你认为哪个更昂贵,需要存储更多的图书馆副本的磁盘空间?或者每次引入向后不兼容的更改时更新所有图书馆的家属所需的开发时间?你错过了一些代码的风险是什么,一个更新中断,它被推到生产中。较少的功能意味着代码将需要重新编译得更少,更快地达到稳定状态,并且将被替换为微不足道的。它有点让人头痛,但在实践中强调组件化的工作令人惊讶。 – 2013-12-16 22:42:11
组件化没有问题,问题是按什么标准。 – Alex 2013-12-17 10:23:22