大家好
目前我有以下参考结构:
DSFinalProject引用了"DAL"
项目和"DataStructure"
项目。
DataStructure
也引用了DAL
项目......
现在我希望DSFinalProject
不会引用DAL
图层,但可以使用该类的接口。
有没有办法将"tunnel"
DAL项目中的接口提供给DSFinalProject而不实际在它们之间进行引用?
也许使用DataStructure项目?还是其他什么?
提前感谢您的任何帮助:)
答案 0 :(得分:1)
我不知道如何在没有对项目(或程序集)的引用的情况下从DSFinalProject引用DAL项目中的接口(或其他任何内容)。
如果您认为它使依赖关系更清晰,您可以将它们移动到另一个项目 - 如果您将接口放在DataStructure项目中 - 您将遇到需要DAL和DAL的循环引用需要它。
答案 1 :(得分:1)
最简单的方法是将它们放在DataStructure
中,这不是太糟糕,因为引用接口的任何东西都需要引用DataStructure
。
我的投票是将它们放在那里直到你遇到需要将接口放在一个单独的程序集中的场景。
答案 2 :(得分:1)
我不相信你有什么问题。如果您考虑序列化对象时会发生什么,您仍然需要程序集来提供字段在数据流中的布局方式的低级结构。它需要接口中的代码来说前4个字节是双精度等等。
所以唯一要做的就是将你的接口移动到一个可以被所有东西引用的新interfaces.dll中。您将在许多示例中重复使用此模式,包括EnterpriseLibrary。
...然而 你犯了一个经典的错误。为什么要将代码分成如此多的项目?项目确实应该被认为是我们代码的运行时包装,而不是设计时间隔离机制。通过拆分成这么多的程序集,你可以做三件事。
看一下这个例子Hints on how to optimise code看看你的解决方案变得更复杂会发生什么。
不是像这样拆分,而是使用命名空间,你仍然会有分离,但是你现在可以通过类中的using语句来控制,而不必使用这么多引用。您将很容易地看到您是否在设计为DSFinalProject层的类中使用DAL引用。您只需在项目下创建一个文件夹,然后在那里添加您的类。摆脱所有项目,仍然有一个适当的分层系统。
随着解决方案的增长,在开始引入项目之前,请等到至少有两个可执行文件,然后考虑运行时的影响。如果您总是要加载两个程序集,请将它们合并为一个(我已经看到了一些开源项目,这些项目使用了ilmerge来合并第三方库)。