Dependency Injection (DI)
Dependency Injection (DI) 是一種設計模式,主要目的是將對象的依賴性注入到對象中,而不是在對象內部自行創建。這使得程式更加模組化、易於測試和維護。
Dependency Injection (DI) 的本質可以簡化為 "Object using Object",但更精確的描述是 "Object receiving its dependencies (other objects) from the outside"。這意味著一個物件依賴於另一個物件,但不是自己創建依賴,而是由外部提供"
Object using object" 是 DI 的核心,但 DI 的真正優勢在於外部提供依賴,實現鬆耦合與高靈活性。如果單純是物件使用其他物件,但依賴關係由內部創建,那麼就不是 DI,而是高耦合的設計。
這樣的設計方式強調物件之間的鬆耦合(low coupling),讓它們更容易測試和維護。
核心概念:
PHP 範例
// 定義一個服務
class Logger {
public function log($message) {
echo "Log: $message\n"; }
}
// 使用 Logger 的類別
class UserService {
private $logger; // 透過建構函式注入依賴
public function __construct(Logger $logger) {
$this->logger = $logger;
}
public function createUser($username) {
// 使用注入的Logger
$this->logger->log("User '$username' created.");
}
}
// 手動注入
Logger $logger = new Logger();
$userService = new UserService($logger);
$userService->createUser("Nathan");
結果:
Log: User 'Nathan' created.
Log:
User