繁体   English   中英

C#接口参考

[英]c# interface references

在此处输入图片说明

大家好

目前,我具有以下参考结构:

DSFinalProject引用了"DAL"项目和"DataStructure"项目。

DataStructure也参考了DAL项目…

现在,我希望DSFinalProject不会引用DAL层,但能够使用该类中的接口。

有什么方法可以将DAL项目中的接口"tunnel"到DSFinalProject,而无需在它们之间进行实际引用?

也许正在使用DataStructure项目? 还是其他?

在此先感谢您的帮助:)

我不知道在没有引用项目(或程序集)的情况下从DSFinalProject引用DAL项目内的接口(或其他任何方式)的方法。

如果您认为它们可以使依赖项更加简洁,则可以将它们移至另一个项目中(如果将接口放入DataStructure项目中),则会遇到需要DAL且需要DAL的循环引用。

最简单的方法是将它们放在DataStructure ,这还不错,因为任何引用接口的内容也都需要引用DataStructure

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

我不相信您有什么要求。 如果考虑序列化对象时会发生什么,您仍然需要该程序集来提供有关字段在数据流中的布局方式的底层结构。 它需要接口中的代码说前4个字节为double等等。

因此,唯一要做的就是将您的接口移动到新的interfaces.dll中,所有内容都可以引用该接口。 您将在许多示例(包括EnterpriseLibrary)中看到这种模式的重复。

但是...您犯了一个经典错误。 您为什么将代码拆分成这么多个项目? 实际上,应该将项目视为代码的运行时打包,而不是设计时间分隔机制。 通过拆分为多个程序集,您可以执行三件事。

  1. 您会降低构建系统的速度,因为编译器在提取其他程序集方面会做更多的工作。
  2. 您放慢了Visual Studio的速度,因为它会更努力地加载所有项目并保持它们之间的引用。 我曾经设计过140个项目的解决方案,而这些项目仅用了15分钟即可打开(但是我总是得到早茶)。
  3. 由于DotNet必须搜索另一个4k dll(这是最小值,即使仅一行代码),也会降低运行时性能。 尝试查看融合日志或使用SysMon来查看此简单操作涉及的工作量。

看一下这个示例, 有关如何优化代码的提示确实看到了随着解决方案变得越来越复杂而将发生的情况。

不用像这样拆分它,而是使用名称空间,您仍然可以使用分隔符,但是不必使用太多的引用,现在可以通过类内部的using语句进行控制。 您将很容易看到,如果在设计为DSFinalProject层的类中使用DAL引用。 您可以只在项目下创建一个文件夹,然后在其中添加类。 摆脱所有项目,仍然拥有一个适当的分层系统。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM