Ich habe derzeit eine Klasse mit eng gekoppelten Abhängigkeiten, und der Klassenkonstruktor hat derzeit keine Parameter. Ich versuche in der Lage zu sein, optional verschiedene Abhängigkeiten zu übergeben, ohne die Konstruktorsignatur zu ändern und somit Anwendungen zu zerbrechen, die die Klasse derzeit verwenden.Standardwerte in Abhängigkeitsinjektion
kam ich mit diesem Muster auf:
class Car {
private $engine;
public function __construct($options = array()) {
if (isset($options['engine']) {
$this->engine = $options['engine'];
} else {
$this->engine = new Engine();
}
}
}
Auf diese Weise Auto nach wie vor (mit einem Standard-Motor) mit new car()
erstellt werden kann, oder von in einem benutzerdefinierten Motor vorbei: new Car(array('engine' => new CustomEngine()))
.
Ist dies ein korrekter Weg, dies zu tun? Welche Probleme hat dies mit Wartbarkeit?
Sie sind auf dem richtigen Weg! Abhängigkeitsinjektion ist genau dies. – colburton
Ich denke, das bezieht sich auf http://Stackoverflow.com/q/8295060/1767861, sollten Sie die gegebenen Antworten lesen :) –