У меня есть класс, который зависит от 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-контейнер. Кажется, что они оба решают одну и ту же проблему одинаково - они создают объекты и внедряют зависимости. У этого контейнера есть несколько более сложных методов построения, таких как загрузка наблюдателей и прикрепление их к наблюдаемым объектам.
Должны ли фабрики выполнять все сборки (загрузка расширений и т. Д.), И контейнер DI должен использовать эти фабрики для внедрения зависимостей? Таким образом, субпакеты, такие как Cache, Response и т. Д., Могут иметь свои собственные специализированные фабрики.