2017-06-03 27 views
1

好的,所以我想解耦我的代碼。我不想在所有地方使用單例,而是想用接口的依賴注入。到現在爲止還挺好。我應該使所有類型的通用接口的類,我依靠嗎?

現在,我有這個大的網絡類,使用其他網絡類作爲參數或返回類型的方法。例如:

public class Network 
{ 
    void OnServerError(NetworkConnection conection, int errorCode); 
} 

public class NetworkConnection 
{ 
    public NetworkError lastError { get; } 
} 

public class NetworkError 
{ 
    public string Error { get; private set; } 
} 
  1. 甚至是否有意義創建網絡類的接口?
  2. 如果是這樣,我需要使所有類型通用?對於具有公共方法的類的類型,我是否也需要爲它創建一個接口?基本上不斷深入課堂,直到一切都是接口或泛型?
  3. 我想爲這個類創建一個接口的原因之一是,我可能會在未來切換到不同的網絡庫,並且我不想在任何地方重構任何東西,儘管我的初始接口將具有相同的簽名幾乎是我現有的網絡課程,所以我不得不在將來重構它。我錯過了什麼?
+0

這裏真正的問題是,你的Network類是否被注入到其他類中......如果是這樣,那麼它可能是有用的。正如Glenn的回答指出的那樣:DI不需要接口,它們只是有用的。真正的答案完全取決於你,但這取決於你的要求。你打算進行構造函數還是屬性注入?你使用什麼容器? – Clint

回答

0

您不一定需要使Network可以利用依賴注入的接口。

當我在一個項目的這個十字路口,當沒有明確的理由從我的課堂中提取一個接口時,我想,「我是不是想爲測試場景寫一個這種類型的模擬實現?

在某些測試中,您可能需要模擬特定場景或行爲。模擬實現對此非常有用。

它有意義的一些類,但不是在任何情況下。

希望這會有所幫助!

+0

對於網絡類,我可以看到我可能想要嘲笑它,因爲我希望我的單元測試不依賴於網絡連接,並只測試其負責的操作。如果是這種情況,我應該把所有的東西都連接起來 – Renato

+0

鑑於提取接口的成本太低(特別是使用Resharper時),許多開發人員默認接口(幾乎)所有內容並不罕見。 – mjwills

相關問題