0

我有以下情况。我们正在开发一个多层应用程序,因此我为每一层制作了不同的组件。让我们称它们为 Top、Middle 和 Base。它们是依赖的,例如:

Top->Middle->Base,因为 Top 使用来自 Middle 和 Middle 从 base 的类。

现在我们将有一个 secong Applikation Top2,它只需要 Middle 中的一些类,它们不使用 Base 中的任何东西。

有没有办法不将 Base 包含在 Top2 的部署中?

尝试编译时,VS 告诉我我还需要对程序集 Base 的引用。

最佳托马斯

4

1 回答 1

1

听起来“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。但你明白了。

于 2013-02-01T15:59:42.093 回答