除了可測試性,利用D.I.的最大優勢是什麼? (我不是在談論一個D.I.框架或IoC)靜態類?特別是對於您知道服務不會被換出的應用程序。除了測試,依賴注入怎麼比靜態類/方法更好?
在我們的一個c#應用程序中,我們的團隊正在web web GUI,服務層和存儲庫層中使用依賴注入,而不是使用靜態方法。過去,我們會創建,修改,傳遞並由靜態類保存的POCO(業務實體對象)。
例如,在過去,我們可能已經編寫:現在
CreditEntity creditObj = CreditEntityManager.GetCredit(customerId);
Decimal creditScore = CreditEntityManager.CalculateScore(creditObj);
return creditScore;
,與DI,同樣的代碼將是:
//not shown, _creditService instantiation/injection in c-tors
CreditEntity creditObj = _creditService.GetCredit(customerId);
Decimal creditScore = _creditService.CalculateScore(creditObj);
return creditScore;
沒有太大的不同,但現在我們有幾十個服務類的範圍要廣得多,這意味着我們應該把它們看作是靜態的(即沒有私有成員變量,除非它們被用來定義更多的依賴關係)。另外,如果這些方法中的任何一個使用資源(數據庫/ Web服務/等),我們會發現更難管理併發性問題,除非我們刪除依賴關係並使用舊的靜態或方法。
「除了可測試性,利用D.I.的最大優勢是什麼」就像是說「除了我的頭上有一個屋頂,對於我來說,拿着工作有什麼大的優勢」。 – TrueWill 2009-09-27 15:11:00