2013-02-01 101 views
0

我有以下情况。我们正在开发一个多层应用程序,所以我为每个图层制作了不同的程序集。让我们称他们为Top,Middle和Base。他们依赖于:.net程序集依赖关系链

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

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

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

当试图编译时,VS告诉我我还需要对汇编库的引用。

最佳 托马斯

+1

当然,把中间分成两部分! – KingCronus

+0

您的意思是,Middle-1使用Base和Middle-2的Middle-Middle和Middle-2,但Middle-2不使用Base? – Thomas

+0

是的。我会在答案中详细说明。 – KingCronus

回答

1

听起来像“中”是有点大了它的靴子。

程序集不应该引用它不需要的任何东西。所以,你的情况听起来像是分解组件的好选择。

当前

Application One -> "Middle.dll" -> "Base.dll" 

您的提案

Application One -> "Middle.dll" -> "Base.dll" 

Application Two -> "Middle.dll" -> "(Redundant) Base.dll" 

这是出现在一些非常常用的对象基本上是与业务逻辑集中unneccesserily一个典型的问题。也就是说,您可能在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。但你明白了。

+0

谢谢,幸运的是,我们的项目还很年轻,所以重构是非常重要的。现在一切都很好。解决方案是将所有没有外部引用的数据类放入一个程序集中。 – Thomas