Dependency Injection (DI)
Dependency Injection (DI) 是一種設計模式,主要目的是將對象的依賴性注入到對象中,而不是在對象內部自行創建。這使得程式更加模組化、易於測試和維護。
Dependency Injection (DI) 的本質可以簡化為 "Object using Object",但更精確的描述是 "Object receiving its dependencies (other objects) from the outside"。這意味著一個物件依賴於另一個物件,但不是自己創建依賴,而是由外部提供。
這樣的設計方式強調物件之間的鬆耦合(low coupling),讓它們更容易測試和維護。
核心概念:
PHP 範例
結果:
C# 範例
結果:
與 "Object Using Object" 的差異
沒有 DI 的設計:
這樣的設計問題:
- 高耦合:
UserService
和Logger
被綁定在一起,無法輕易更換Logger
的實現。 - 難以測試:如果需要模擬
Logger
,就必須修改UserService
。
使用 DI 的設計:
這樣的設計優點:
- 低耦合:
UserService
只關注如何使用Logger
,不關心它的實現細節。 - 可替換性:可以輕鬆更換不同的
Logger
實現。 - 可測試性:可以注入假(mock)物件來模擬
Logger
的行為。