Контейнер инъекции зависимостей PHP с фабрикой
Я работаю с silexphp/Pimple
Dependency Injection Containers (DIC) и я не уверен, как обращаться с тем, что будет классическим шаблоном Factory.
Пример:
Родительский класс Animal.php
имеет два дочерних класса DogAnimal.php
а также CatAnimal.php
, Количество дочерних классов может расти.
В этом случае я бы хотел создать Фабрику для создания новых Объектов Животных или детей класса Животных. Pimple позволяет создавать фабричные методы для каждой службы.
При использовании Pimple DIC я не думаю, что хочу добавить каждый подкласс (Dog, Cat и т. Д.) В качестве службы. Тем более, что список растет. Мне это кажется неправильным использованием DIC, но, возможно, я ошибаюсь.
Правильно ли я считаю, что мне следует создать службу Animal Factory и использовать Pimple для внедрения зависимостей в фабрику, которая, в свою очередь, используется для создания новой собаки или кошки?
1 ответ
Да, ты прав. Вы можете создать сервис (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');