以下代碼有什麼問題?IoC和依賴注入
public class DeDoper {
public boolean wackapediaOkToday() {
DnsResolver resolver = ResolverFactory.getInstance().makeResolver();
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
爲什麼這個版本首選?
public class DeDoper {
@InjectService
private DnsResolver resolver;
public boolean wackapediaOkToday() {
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
我可以很容易模擬ResolverFactory.makeResolver(),這是與設置旋轉變壓器是最新的例子。
這是在this article從ProQuest.biz說:
此[首頁]版本WackapediaOkToday是非常嚴格意義上「注入」了的DNSResolver(雖然這是無可否認不太像得到了一槍,更像是向服務員詢問支票)。但它確實解決了測試問題,並解決了「烏龜一路下山」的問題。
鏈接到工廠 但是在這個[第一版本]方法中,我們實際上是「鏈接」到Factory類的。 (更糟糕的是,如果我們的工廠創建的對象輪流依賴,我們可能不得不在工廠中引入新的工廠)。我們還沒有完全「顛倒」我們的控制,我們仍然從內部調用(控制)工廠我們的課程。
我們需要的是一種完全擺脫我們課程控制的方法,讓他們告訴他們所得到的(他們的依賴)。