Factory and AbstractFactory в ZendFramework 2

В чем принципиальная разница между Фабрикой и Абстрактной Фабрикой в ​​ZF2?

1 ответ

Решение

Фабрика используется для создания одного сервиса для контекста. Абстрактная фабрика используется для создания множества похожих сервисов в контексте. Например, представьте, что вашему приложению требуется один репозиторий "UsersRepository", который подключается к вашей базе данных и позволяет извлекать данные из таблицы "Users". Вы бы создали фабрику для этого сервиса следующим образом:

class UsersRepositoryFactory implements FactoryInterface
{
    public createService(ServiceLocatorInterface $serviceLocator)
    {
        return new \MyApp\Repository\UsersRepository();
    }
}

Однако в реальном мире вам может потребоваться взаимодействовать со многими таблицами в вашем приложении, поэтому вам следует рассмотреть возможность использования Abstract Factory для создания служб репозитория для каждой таблицы.

class RepositoryAbstractFactory implements AbstractFactoryInterface
{
    canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return class_exists('\MyApp\Repository\'.$requestedName);
    }

    createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        $class = '\MyApp\Repository\'.$requestedName;
        return new $class();
    }
}

Как видите, вам не нужно создавать отдельную фабрику для каждой службы репозитория в вашем приложении.

Другие вопросы по тегам