Don*_*joe 6 doctrine repository-design repository-pattern symfony doctrine-orm
我理解好处或存储库模式,但我无法理解在 Symfony3 Doctrine 中有Doctrine\ORM\EntityManager和\Doctrine\ORM\EntityRepository
应该将存储库注入控制器还是实体管理器?
编辑 正确的问题应该是:从控制器访问存储库的正确方法是什么?
实体管理器是否应该包含任何查询?
编辑
正确的问题应该是:服务是否应该包含查询?@MateuszSip 已经解释过了,可以通过注入实体管理器来完成
是否应该将自定义功能getAvailableManagers放在存储库或服务中?(manager存储库在哪里,确定有一些逻辑available manager)
findAllManager,它应该在存储库还是实体管理器中?目前我正在使用 Symfony3。非常感谢
干杯,
编辑 与@MateuszSip 交谈(感谢队友),我决定用下面的例子让我的问题更清楚。请注意,下面的代码并不代表真正的问题
控制器
Class ManagementController
{
public function assignManager($projectType)
{
// Grabbing a service
$s = $this->get('mycompany_management_management_service')
$managers = $s->findAvailableManagers();
$managers = $s->checkCapability($managers, $projectType);
return $managers
}
}
Run Code Online (Sandbox Code Playgroud)
存储库
class ManagerRepository extends \Doctrine\ORM\EntityRepository
{
public function findAvailableManagers()
{
...
return $managers
}
public function checkCapability($managers, $type)
{
...
return $capableManagers
}
}
Run Code Online (Sandbox Code Playgroud)
服务
class ManagementService
{
... I am not sure what should be here.
}
Run Code Online (Sandbox Code Playgroud)
小智 6
它是一个管理对象状态及其与数据库关系的类。
存储库是一种标准化实体访问的模式。
如果您的应用程序很复杂,您应该向控制器注入单独的服务。因此,有一个 UserSaver 服务(作为示例)使用EntityManager来创建/更新用户,并使用UserRepository创建/更新用户和UserFinder(或名称良好的东西),后者负责按定义的标准获取用户。
您可以使用实体管理器创建查询,但实体管理器本身不能包含查询。
在我看来,在服务中定义一个方法,并在 UserRepository 中定义一个相应的方法。此时,您想要的所有内容都应该由数据库获取,但稍后可能会更改。
在存储库中。诸如 findByRole(role=manager)、findIsActive、findOneBySecurityNumber 之类的方法依赖于存储库。
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |