[英]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)中看到這種模式的重復。
但是...您犯了一個經典錯誤。 您為什么將代碼拆分成這么多個項目? 實際上,應該將項目視為代碼的運行時打包,而不是設計時間分隔機制。 通過拆分為多個程序集,您可以執行三件事。
看一下這個示例, 有關如何優化代碼的提示確實看到了隨着解決方案變得越來越復雜而將發生的情況。
不用像這樣拆分它,而是使用名稱空間,您仍然可以使用分隔符,但是不必使用太多的引用,現在可以通過類內部的using語句進行控制。 您將很容易看到,如果在設計為DSFinalProject層的類中使用DAL引用。 您可以只在項目下創建一個文件夾,然后在其中添加類。 擺脫所有項目,仍然擁有一個適當的分層系統。
隨着解決方案的發展,請等到至少有兩個可執行文件后再開始引入項目,然后考慮運行時的影響。 如果您總是要加載兩個程序集,請將它們合並為一個(這些天我也見過一些開源項目,這些項目也使用ilmerge合並到第三方庫中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.