3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
差異可能看起來很小,但即使使用ServiceLocator,該類仍然負(fù)責(zé)創(chuàng)建其依賴項(xiàng)。它只是使用服務(wù)定位器來完成它。使用DI,該類被賦予其依賴性。它既不知道,也不關(guān)心它們來自何處。這樣做的一個(gè)重要結(jié)果是DI示例更容易進(jìn)行單元測試 - 因?yàn)槟梢詫⑵湟蕾噷ο蟮哪M實(shí)現(xiàn)傳遞給它。如果需要,您可以將兩者結(jié)合起來 - 并注入服務(wù)定位器(或工廠)。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
服務(wù)定位器隱藏依賴關(guān)系 - 當(dāng)從對象獲取連接時(shí),您無法通過查看對象是否訪問數(shù)據(jù)庫(例如)。使用依賴項(xiàng)注入(至少構(gòu)造函數(shù)注入),依賴項(xiàng)是顯式的。
此外,服務(wù)定位器打破了封裝,因?yàn)樗鼈兲峁┝藢ζ渌麑ο蟮囊蕾囮P(guān)系的全局訪問點(diǎn)。使用服務(wù)定位器,與任何單例一樣:
很難為客戶端對象的接口指定前置和后置條件,因?yàn)槠鋵?shí)現(xiàn)的工作可以從外部進(jìn)行干預(yù)。
使用依賴項(xiàng)注入,一旦指定了對象的依賴項(xiàng),它們就會受到對象本身的控制。
- 3 回答
- 0 關(guān)注
- 1159 瀏覽
添加回答
舉報(bào)