Для внедрения зависимостей я понимаю, что мне нужно передать экземпляр одного класса в основной, а не основной класс, создав его собственный экземпляр, например так (php):
class Class_One {
protected $_other;
public function setOtherClass( An_Interface $other_class ) {
$this->_other_class = $other_class;
}
public function doWhateverYouHaveToDoWithTheOtherClass() {
$this->_other_class->doYourThing();
}
}
interface An_Interface {
public function doYourThing();
}
class Class_Two implements An_Interface {
public function doYourThing() { }
}
class Class_Three implements An_Interface {
public function doYourThing() { }
}
// Implementation:
$class_one = new Class_One();
$class_two = new Class_Two();
$class_three = new Class_Three();
$class_one->setOtherClass( $class_two );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
$class_one->setOtherClass( $class_three );
$class_one->doWhateverYouHaveToDoWithTheOtherClass();
Этовсе хорошо.Я знаю, что, поскольку оба Class_Two и Class_Three реализуют An_Interface, они могут использоваться взаимозаменяемо в Class_One.Class_One не будет знать разницу между ними.
Мой вопрос в том, является ли хорошей идеей вместо передачи экземпляра в setOtherClass передать строку, например "Class_Two", и использовать метод setOtherClass класса Class_Oneна самом деле создайте сам экземпляр следующим образом:
class Class_One {
...
public function setOtherClass( $other_class_name ) {
$this->_other_class = new $other_class_name();
}
...
}
Означает ли это побеждение цели внедрения зависимостей или это полностью допустимо?Я думал, что этот тип настройки может помочь мне с конфигурацией, где пользователь может указать, какой класс он хочет использовать в строке ранее, и это позже может быть передано в Class_One ..
На самом деле, написание этогоЭто заставило меня подумать, что это, вероятно, не очень хорошее решение, но я все равно опубликую это на тот случай, если кто-нибудь может дать мне хороший отзыв о том, почему я должен / не должен делать это.
Спасибо =)
Райан