.net程序集依赖链

时间:2013-02-01 15:49:41

标签: .net .net-assembly

我有以下情况。我们正在考虑多层应用程序,因此我为每个层制作了不同的程序集。让我们称他们为Top,Middle和Base。他们喜欢:

Top-> Middle-> Base,因为Top使用来自中间和中间的clases。

现在我们将拥有一个非常适合的应用程序Top2,它只需要来自Middle的一些不使用Base的任何类。

有没有办法,在Top2的部署中不包括Base?

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

最佳

托马斯

1 个答案:

答案 0 :(得分:1)

听起来像“中间”的靴子有点大。

程序集不应引用它不需要的任何内容。因此,你的情况听起来像是拆分大会的好选择。

当前

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"

需要使用当前存在于Middle.dll中的Base.dll的所有功能都应该移到Middle1.dll。这样,如果您只需要使用非依赖代码,您可以只引用Middle2.dll

它可能是一个很大的重构,取决于你的代码库,但是稍后你就会欣赏它!

对此的好处

  • 测试将得到改善。
  • 如果您需要将这两个应用程序完全分开,那么您可以进行更少的重构。
  • 如果您因某种原因只需要更改“Middle1”,则破坏这两个应用程序的可能性会降低
  • 关注的清洁分离
  • 没有像你现在这样的编译器问题
  • 每个程序的程序不需要集总代码
  • 更小,更易于管理的程序集
  • 改进的intellisense
  • Middle1和Middle2可以共享相同的命名空间,因此对于您的应用程序,他们不会知道其中的区别。

注意:显然我并不是说你应该叫他们Middle1和Middle2。但是你明白了。