持久性逻辑应该放在Doctrine中的哪个位置?

时间:2011-12-28 03:42:12

标签: php symfony doctrine doctrine-orm

如果您希望在整个应用程序中共享查询,则可以使用Doctrine存储库。

将持久性逻辑放在存储库中是一个好主意,这样存储库不仅可用于查询,还可用于创建和更新对象吗?

持久性逻辑还有其他地方不在控制器本身吗?

1 个答案:

答案 0 :(得分:3)

将其放入service layer。在这种情况下,您的控制器只知道服务层,但不知道存储库层。服务层可以将查询委托给存储库层,也可以单独执行 - 我更喜欢后者。

只是一个基本的例子:

class CommentService
{
    private $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function find($id) 
    {
        // do a query here or delegate to a repository
    }

    public function findByPost(Post $post)
    {
        // do a query here or delegate to a repository
    }

    public function save(Comment $comment)
    {
        // exec an operation here
    }

    public function delete(Comment $comment)
    {
        // exec an operation here
    }
}