Контейнер инъекции зависимостей 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');
Другие вопросы по тегам