我们有一个enterpise Web应用程序,它由4个编译组件(DLL)组成。一年多以前,我们开始实现更细粒度的组件,以试图隔离功能,减少耦合并降低重新编译和部署大量代码的风险。虽然没有人认为这种方法在添加新功能和修补错误时为我们提供了更大的灵活性和上市速度,但现在应用程序包含近40个dll。我们有一个命名约定,可以很好地识别我们的组件。
我的问题是:有多个dll的应用程序是否存在任何漏洞(性能,维护等等)?
编辑:我们正在探索将代码重构为更大的组件的选项,我认为这可能是各种各样的回归......
答案 0 :(得分:15)
我的问题是:有没有 下方(性能,维护, 等...)有一个应用程序 很多dll?
许多DLL的缺点?没有
有太多DLL的缺点?肯定。
那么有多少太多了?
程序集是一种组织方式,如命名空间和类。命名空间定义逻辑边界,程序集物理边界。
您应该尝试保持程序集连贯,并将它们视为系统模块。
是的,如果你有数百个,那就会出现(小)性能问题。但是40岁的时候,我没有看到任何问题。
答案 1 :(得分:12)
将独立的功能域分成单独的DLL通常是好东西。它有助于引入重用的可能性,并有助于减少类的内部实现之间引入不适当的耦合。
但是,将多个程序集作为系统的一部分引入存在缺点:
答案 2 :(得分:7)
维护 - 不,性能 - 是的。需要加载的程序集越多,应用程序启动的速度就越慢。对于需要加载到AppDomain的每个程序集,加载程序需要执行一系列验证。
答案 3 :(得分:5)
随着更多DLL而变得更糟的问题是:
我遵循的建议是使用DLL来组织部署,使用命名空间来组织代码。如果您发现总是将一组给定的DLL一起发布,那么您也可以合并它们。
答案 4 :(得分:3)
不要忘记ILMerge。如果你想要多个DLL用于开发(不同的项目),但是需要一个EXE用于部署(加载速度更快,更易于部署),它的效果非常好。
ILMerge的缺点是它会在某些动态加载方案中失败,例如,通过(字符串)名称创建类型的实例。因此,ILMerge可能或可能不可行,具体取决于您的IoC提供商。