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();
}
}
Как видите, вам не нужно создавать отдельную фабрику для каждой службы репозитория в вашем приложении.