2013-10-30 76 views
2

我看到以下類型的這麼多的代碼:是否存在不應用依賴注入的情況?

private final Map<String, String> map; 

    public SomeConstructor() { 
     this.map = new HashMap<String, String>(); 
    } 

那麼這樣的代碼可以容易地通過在地圖中作爲參數傳遞到SomeConstructor被替換。 擴展我的問題,是否有一些情況下,依賴注入不是正確的事情,而是使用構造函數來初始化?

回答

4

如果您可能想要注入不同類型的參數,則使用依賴注入,它不僅僅是一個內部細節。在這樣的簡單情況下,另一個類可能不會注入地圖類型 - 這是一個內部細節。但是,對於像數據庫服務這樣的東西,您可能希望注入不同的類型(以及測試用的存根)。

+0

「使用,它不是隻是一個內部細節。「非常好描述!即「不應該注入任何不需要輸入參數的東西」 – JavaDeveloper

3

想想單元測試。

SomeClass c = new SomeClass(new HashMap(), new HashMap(), 
    new HashMap(), new ArrayList()); 

是頗有幾分比

SomeClass c = new SomeClass(); 

更惱人如果你無法預見任何人提供一個不同的實現,永遠,真的沒有一點。

考慮

SomeClass { 
    List list = new ArrayList(); 
} 

如果注入的是,人們可以通過一個LinkedList相反,我的猜測是一個雙贏 - 沒有其他的代碼被修改。但是SomeClass的實現有多大可能不會因此而改變?

總之,我會說

  • 依賴注入更容易編寫,更難讀,更難調試
  • 沒有爲瑣碎的東西