Контейнер инъекции зависимостей PHP с фабрикой

Я работаю с silexphp/Pimple Dependency Injection Containers (DIC) и я не уверен, как обращаться с тем, что будет классическим шаблоном Factory.

Пример:

Родительский класс Animal.php имеет два дочерних класса DogAnimal.php а также CatAnimal.php, Количество детских классов Можно расти.

В этом случае я бы хотел создать Фабрику для создания новых Объектов Животных или детей класса Животных. Pimple позволяет создавать методы Factory для каждой службы.

При использовании Pimple DIC я не думаю, что хочу добавить каждый подкласс (Dog, Cat и т. Д.) В качестве службы. Тем более, что список растет. Мне это кажется неправильным использованием DIC, но, возможно, я ошибаюсь.

Я прав, полагая, что я должен создавать службу Animal Factory и использовать Pimple для внедрения зависимостей в фабрику, которая, в свою очередь, используется для создания новой собаки или кошки?

4

Решение

Да, ты прав. Вы можете создать сервис (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');
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]