我想学习依赖倒置原则。目前我的代码是这样的减少手动对象实例化
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