gpt4 book ai didi

design-patterns - Doctrine2 存储库是保存我的实体的好地方吗?

转载 作者:行者123 更新时间:2023-12-03 05:57:23 24 4
gpt4 key购买 nike

当我阅读有关存储库的文档时,通常会以“只读”方式处理实体和集合。

从来没有存储库具有 insertUser(User $user)updateUser(User $user) 等方法的示例。

但是,当使用 SOA 时,服务不应该与实体管理器一起工作(这是正确的,不是吗?),所以:

  1. 我的服务应该了解全局 EntityManager 吗?
  2. 我的服务是否应该只了解已使用的存储库(例如 UserRepository 和 ArticleRepository)

从这两个问题中,另一个问题是,我的服务是否应该明确 persist()flush() 我的实体?

最佳答案

是的,存储库通常仅用于查询。

这是我的做法。 service layer管理持久性。 Controller 层知道服务层,但不知道模型对象如何持久化,也不知道它们来自哪里。 Controller 层关心的是要求服务层持久化并返回对象——它不关心它实际上是如何完成的。

服务层本身非常适合了解持久层:实体或文档管理器、存储库等。

这里有一些代码可以让它更清楚:

class UserController
{
public function indexAction()
{
$users = $this->get('user.service')->findAll();
// ...
}

public function createAction()
{
// ...
$user = new User();
// fill the user object here
$this->get('user.service')->create($user);
// ...
}
}

class UserService
{
const ENTITY_NAME = 'UserBundle:User';

private $em;

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

public function findAll()
{
return $this->em->getRepository(self::ENTITY_NAME)->findAll();
}

public function create(User $user)
{
// possibly validation here

$this->em->persist($user);
$this->em->flush($user);
}
}

关于design-patterns - Doctrine2 存储库是保存我的实体的好地方吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com