听起来“Middle”的靴子有点大了。
程序集不应引用它不需要的任何内容。因此,因此您的情况听起来像是拆分程序集的好人选。
当前的
Application One -> "Middle.dll" -> "Base.dll"
你的建议
Application One -> "Middle.dll" -> "Base.dll"
Application Two -> "Middle.dll" -> "(Redundant) Base.dll"
这是一个典型的问题,当一些真正常用的对象本质上不必要地与业务逻辑混为一谈时,就会出现这种问题。即,您可能在 Middle.dll 中有对应用程序有用的实用程序类,但它们并不真正需要在其中。使用单独的实用程序 dll 可能会更好。
建议
Application One -> "Middle1.dll" -> "Base.dll"
-> "Middle2.dll"
Application Two -> "Middle2.dll"
所有需要使用 Base.dll 的功能(当前存在于 Middle.dll 中)都应移至 Middle1.dll。这样如果你只需要使用非依赖代码,你可以参考Middle2.dll
这可能是一个很大的重构,取决于您的代码库,但稍后您会欣赏它!
这样做的好处
- 测试将得到改进。
- 如果您需要将这两个应用程序完全分开,那么您需要做的重构工作就更少了。
- 如果您出于某种原因只需要更改“Middle1”,则破坏这两个应用程序的可能性较小
- 更清晰地分离关注点
- 没有像您目前遇到的编译器问题
- 每个程序都不需要程序集总代码
- 更小、更易于管理的组件
- 改进的智能感知
- Middle1 和 Middle2 可以共享相同的命名空间,因此对于您的应用程序,他们不会知道区别。
注意:显然我并不是建议您将它们称为 Middle1 和 Middle2。但你明白了。