我想學習依賴倒置原則。目前我的代碼是這樣的減少手動對象實例化
class Example {
public function __construct($input, $output) {
$input_handler = new InputHandler($input);
$output_handler = new OutputHandler($output);
$input_handler->doStuff();
$output_handler->doOtherStuff();
}
}
$input = new Input();
$output = new Output();
$example = new Example($input, $output)
但是,它似乎使用基本的依賴注入,它應該更像這樣嗎?
class Example {
public function __construct($input_handler, $output_handler) {
$input_handler->doStuff();
$output_handler->doOtherStuff();
}
}
$input = new Input();
$output = new Output();
$input_handler = new InputHandler($input);
$output_handler = new OutputHandler($output);
$example = new Example($input_handler, $output_handler)
這是正確的嗎?
我想讓程序員在運行程序時選擇輸入/輸出的類型。因此,依賴注入(據我所知)它看起來像這樣;
$input = new ConsoleInput();
$output = new FileOutput();
$input_handler = new ConsoleInputHandler($input);
$output_handler = new FileOutputHandler($output);
$example = new Example($input_handler, $output_handler);
$example->doStuffToOutput();
不過,我寧願只需要在輸入和輸出的類型,請通過讓程序員生活小更容易,而無需擔心處理它們的類;
$input = new ConsoleInput();
$output = new FileOutput();
$example = new Example($input, $output);
$example->doStuffToOutput();
甚至
$example = new Example(new ConsoleInput(), new FileOutput());
$example->doStuffToOutput();
我怎樣才能做到這一點使用DIP,而不是與我最初的代碼塊結束了?這是一件好事嗎?
看來,在你的第一個例子中,無法定義處理程序類型(ConsoleInputHandler/ConsoleOutputHandler/FileInputHandler/FileOutputHandler)。這是你試圖解決的問題嗎? – TechWisdom