Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework2 ZendFramework 2中的工厂和抽象工厂_Zend Framework2_Zend Framework Mvc - Fatal编程技术网

Zend framework2 ZendFramework 2中的工厂和抽象工厂

Zend framework2 ZendFramework 2中的工厂和抽象工厂,zend-framework2,zend-framework-mvc,Zend Framework2,Zend Framework Mvc,ZF2中工厂和抽象工厂的基本区别是什么工厂用于为每个上下文创建单个服务。抽象工厂用于为每个上下文创建许多类似的服务。 例如,假设您的应用程序需要一个存储库“UsersRepository”,它连接到您的数据库,并允许您从“Users”表中获取数据。您将为此服务创建一个工厂,如下所示: class UsersRepositoryFactory implements FactoryInterface { public createService(ServiceLocatorInterface

ZF2中工厂和抽象工厂的基本区别是什么工厂用于为每个上下文创建单个服务。抽象工厂用于为每个上下文创建许多类似的服务。 例如,假设您的应用程序需要一个存储库“UsersRepository”,它连接到您的数据库,并允许您从“Users”表中获取数据。您将为此服务创建一个工厂,如下所示:

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

但是,在现实世界中,您可能希望与应用程序中的许多表进行交互,因此,您应该考虑利用抽象工厂为每个表创建存储库服务。

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();
    }
}
如您所见,您不必为应用程序中的每个存储库服务创建单独的工厂