У меня есть класс, который зависит от 3 классов, все 3 из которых имеют другие классы, на которые они полагаются. В настоящее время я использую класс контейнера для создания всех необходимых классов, вставляя их друг в друга и возвращаю приложение.
Упрощенная версия контейнера выглядит примерно так:
class Builder { private $_options; public function __construct($options) { $this->_options = $options; } public function build() { $cache = $this->getCache(); $response = $this->getResponse(); $engine = $this->getEngine(); return new Application($cache,$response,$engine); } public function getResponse() { $encoder = $this->getResponseEncoder(); $cache = $this->getResponseCache(); return new Response($encoder,$cache); } // Methods for building each object }
Я не уверен, что это будет классифицироваться как FactoryMethod или DI Container. Они оба, похоже, решают одну и ту же проблему одинаково: они строят объекты и вводят зависимости. Этот контейнер имеет несколько более сложных методов построения, таких как загрузка наблюдателей и прикрепление их к наблюдаемым объектам.
Если фабрики занимаются всем зданием (загрузочные расширения и т. Д.), А контейнер DI должен использовать эти заводы для инъекций зависимостей? Таким образом, подпакеты, такие как Cache, Response и т. Д., Могут иметь свои собственные специализированные фабрики.