Я работаю с silexphp/Pimple
Dependency Injection Containers (DIC) и я не уверен, как обращаться с тем, что будет классическим шаблоном Factory.
Пример:
Родительский класс Animal.php
имеет два дочерних класса DogAnimal.php
а также CatAnimal.php
, Количество детских классов Можно расти.
В этом случае я бы хотел создать Фабрику для создания новых Объектов Животных или детей класса Животных. Pimple позволяет создавать методы Factory для каждой службы.
При использовании Pimple DIC я не думаю, что хочу добавить каждый подкласс (Dog, Cat и т. Д.) В качестве службы. Тем более, что список растет. Мне это кажется неправильным использованием DIC, но, возможно, я ошибаюсь.
Я прав, полагая, что я должен создавать службу Animal Factory и использовать Pimple для внедрения зависимостей в фабрику, которая, в свою очередь, используется для создания новой собаки или кошки?
Да, ты прав. Вы можете создать сервис (AnimalFactory
), который создает объект, который вы хотите использовать (DogAnimal
, CatAnimal
…)
Простой пример может быть:
class AnimalFactory
{
public function createAnimal($name)
{
// some logic here with $name
$animal = new ...();
return $animal;
}
}
$pimple['animal_factory'] = function ($c) {
return new AnimalFactory();
};
$dog = $pimple['animal_factory']->createAnimal('Dog');
Других решений пока нет …