2015-09-18 128 views
1

假設我有一個項目A,它引用了項目B.B中定義了一些類,A有一個接口ISomething,其實現位於A中,並使用B的類。然後我想創建項目C和A的另一個接口實現,它使用C的類。問題在於:我想將此接口的實現移至相應的項目,以便我可以定義要在構建腳本中使用哪個項目並省略其他項目。儘管如此,我仍然希望保存接口和它的實現之間的連接,以便使用這個接口的大量已經存在的代碼。到目前爲止,我一直在思考了以下選項:分離接口和實現

  • 使用適配器模式在項目A,返回ISomething,同時引用實現和實施適應B的如果C丟失,反之亦然。從我的角度來看,所有接口實現關係都是無用的創建包含接口並由A,B和C引用的項目D,然後在此項目中解析其中一個實現的接口。一個項目接收具體的實例並使用它。這意味着我需要創建另一個庫並污染存儲庫。

什麼樣的選擇更好,還有其他嗎?

+0

您是否需要將實現保留在單獨的項目中?即不希望代碼在某些版本中存在? –

+0

我的主項目針對多個平臺,我使用腳本根據運行腳本的參數生成特定的解決方案文件。我想要的是定義新的參數,它將指定我想在解決方案(B或C)中使用哪個項目,這就是爲什麼我想要在單獨的項目中移動實現 –

回答

2

我肯定會去的項目D.

有時候你會看到它在界面甚至沒有共享,或意味着要共享,這顯然矯枉過正的解決方案,但我要說的是你的情況會是最好的辦法。

現在,你可能想要做的不只是把它作爲一個DLL或項目的參考,因爲

  1. 你必須編譯和鏈接項目,這將需要時間。即使該項目中沒有代碼,鏈接時間仍然會發生。
  2. 您將沒有簡單的方法來版本化您的界面,因此編輯一個項目中的界面並進行重大更改需要立即在其他項目上傳播,並且您不知道是否已經完成了界面。

爲了避免這些兩個問題,我想創建一個的NuGet包出這個項目D的你不需要來承載它NuGet.org,你可以簡單地自託管它,要麼被內部部署服務器,還是最簡單的方法:通過指向本地或共享文件夾。