2010-02-19 65 views
2

關於接口類型的放置的最佳做法是什麼。視覺演播室解決方案中接口的放置

通常最快最容易做的事情就是將界面放置在與其具體實例相同的項目中 - 但是,如果我正確地理解了這些事情,這意味着您更有可能最終導致項目依賴性問題。這是否是對這種情況的公正評估?如果是這樣,這意味着界面應該分成不同的項目嗎?

回答

2

這取決於你想要做什麼。將接口和類放在同一個程序集中將會在某種程度上限制抽象接口的有用性,這是正確的。例如。如果您想要在AppDomain中加載類型以便再次卸載這些類型,則通常會通過接口訪問實例。但是,如果接口和類位於同一個程序集中,則無法加載接口而不加載類。

同樣,如果稍後您想爲一個或多個接口提供一組不同的類,如果它們與接口位於同一個程序集中,您仍將獲得所有舊類型。因爲我不得不承認我偶爾會在同一個程序集中放置接口和類,因爲我不認爲我需要這種靈活性,所以我更願意保持簡單。只要你有選擇重建所有的東西,你可以在需要時重新安排接口。

1

在一個簡單的解決方案中,我可能會在同一個項目中使用公共接口和公共工廠類以及內部實現類。

在一個更復雜的解決方案中,爲避免項目A依賴於項目B中的接口,並且項目B依賴於項目A中定義的接口,我可能會將接口移動到一個單獨的項目中,該項目本身取決於什麼都不做,所有其他項目都可以依賴。

我的做法是「不能從頭開始創建大型系統:發現工作不變的大型系統從小型系統發展而來。」所以我最好從一個小而簡單的解決方案開始,將同一個項目中的接口作爲實現,然後(如果發現有必要)重構將接口移動到單獨的程序集中。

然後再次有包裝;您可能會開發單獨的項目,並在運送時將所有內容重新打包成單個程序集。

1

這是一個部署細節。有幾種情況,您在其中將接口類型放入其自己的程序集中。當在插件開發中使用它們或在多個AppDomain中運行的任何其他類型的代碼時,肯定是這樣。 Remoting或任何其他類型的連接架構幾乎可以肯定。

除此之外,它已經不再那麼重要了。接口類型就像另一個類,如果您需要在另一個項目中使用,則可以添加程序集引用。將它們分開可以幫助控制版本控制。如果接口類型的變化可能導致實現它們的類的廣泛變化,那麼保持它們分離是一個好主意。當您這樣做時更改[AssemblyVersion]的操作現在可以幫助您解決忘記更新客戶端程序集的部署問題。

相關問題