Doctrine orm 自定义存储库责任原则

Doctrine orm 自定义存储库责任原则,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我目前正在使用ZF2和条令2。现在我有一个用户服务,我想用一个自定义存储库来替换它。到目前为止,这非常有效,但我不确定是否还应该将向用户添加/附加其他实体的方法放入此自定义存储库。 当前驻留在用户服务中的一个示例方法是: public function addBookmark(User $user, $userId, $videoId) { $author = $this->getById($userId); $bookmarkEntity = new Bookmark(

我目前正在使用ZF2和条令2。现在我有一个用户服务,我想用一个自定义存储库来替换它。到目前为止,这非常有效,但我不确定是否还应该将向用户添加/附加其他实体的方法放入此自定义存储库。 当前驻留在用户服务中的一个示例方法是:

public function addBookmark(User $user, $userId, $videoId)
{
    $author = $this->getById($userId);

    $bookmarkEntity = new Bookmark();
    $bookmarkEntity->setAuthor($author);
    $bookmarkEntity->setUser($user);
    $bookmarkEntity->setVideoId($videoId);

    $user->addBookmark($bookmarkEntity);

    $this->getEntityManager()->persist($bookmarkEntity);
    $this->getEntityManager()->flush();
}
我认为这个功能对于存储库来说过于定制了

另一种方法是将所有find方法放入定制存储库,并让其余方法留在服务中,同时注入存储库。然而,这种方法的缺点是,我不能直接从存储库访问用户服务中的实体管理器,这导致第二个依赖实体管理器仅用于持久化刷新


最好的方法是什么?提前感谢您的帮助

你真的想在这个阶段冲水吗?它将保存自上次刷新以来的所有更改,这意味着如果要在此函数之后执行更多数据库操作,将丢失事务。这不是问题,因为这是我在此请求期间执行的唯一数据库操作。但是,你是对的——doctrine会在php请求结束时自动刷新吗?我知道,但是因为它是存储库中的一个公共函数,所以你也允许其他进程使用它,你不知道在将来可能创建的请求期间,它是否会是相同的。我只是说这是一种坏习惯。默认情况下,条令不会自动刷新。也许您可以将其配置为这样做,但默认情况下不会