簡體   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