2012-09-21 39 views
0

enter image description herec#界面引用

大家

目前,我有以下参照结构:

DSFinalProject有"DAL"项目和"DataStructure"项目的参考。

DataStructureDAL项目以及参考...

现在我想的是DSFinalProject不会有参考DAL层,但将能够使用接口从该类。

有什么办法"tunnel"是在DAL项目DSFinalProject实际上不使它们之间的引用的接口?

也许使用数据结构的项目?还是其他什么?

预先感谢任何帮助:)

+6

将接口移动到不同的项目? –

+0

这是我的解决方案之一,但我试图找到其他方式。而不是添加对另一个项目的引用,只需使用DataStructure访问DAL接口 –

+0

只要'DataStructure'没有引用'DAL'(它不应该)就可以工作 –

回答

1

最简单的方法是将它们放入DataStructure,这并不算太坏,因为引用接口的任何东西都需要引用DataStructure

我的投票是将它们放在那里,直到遇到场景时,您需要需要将接口放在单独的程序集中。

+0

谢谢...我将根据您的答案重新设计我的解决方案:) –

1

我不知道有什么方法来引用接口(或其他任何东西)从DSFinalProject的DAL项目中,而无需到项目(或组件)的引用。

你可以将它们移动到另一个项目如果你认为它使依赖清洁 - 如果你把接口的数据结构项目 - 你会碰上它需要DAL循环引用和DAL需要它。

1

我不相信有反正你问有啥。如果您考虑串行化对象时发生的情况,您仍然需要使用程序集来提供字段在数据流内布局的低级结构。它需要在接口的代码说,前4个字节是双等

所以才做,这是你的接口移动到一个新的interfaces.dll可以通过一切引用。在包括EnterpriseLibrary在内的许多示例中,您会看到这种模式重复出现。

但是...... 你是一个典型的错误。你为什么要将你的代码分解成这么多项目?项目真的应该被认为是我们代码的运行时包装,而不是一个设计时间隔离机制。通过分成许多集会,你做了三件事。

  1. 由于编译器会执行更多的工作来获取其他程序集,因此您会减慢编译系统的速度。
  2. 你慢下来的Visual Studio,因为它的工作更难加载的所有项目,并保持它们之间的引用。我曾经参与过140个项目的解决方案,只花了15分钟才打开(但我总是拿到早晨的咖啡)。
  3. 由于DotNet不得不搜索另一个4k dll(这是最低限度,即使只有一行代码),您也会减慢运行时间性能。尝试查看融合日志或使用SysMon查看在这个简单操作中涉及多少工作。

看看这个例子Hints on how to optimise code看看会发生什么事情,因为你的解决方案变得更加复杂。

而不是像这样分割它,而是使用命名空间,你仍然有分离,但不必使用这么多的引用,你现在可以控制你的类中的using语句。您将很容易地看到您是否在设计为处于DSFinalProject层的类中使用DAL引用。你可以在项目下创建一个文件夹,然后添加你的类。摆脱所有的项目,仍然有一个适当的分层系统。

随着解决方案的增长,请等到您至少有两个可执行文件后再开始引入项目,然后考虑运行时间影响。如果你总是要加载两个程序集,将它们合并成一个(我见过一些开源项目,这些项目使用ilmerge在第三方库中合并)。