gpt4 book ai didi

model - Doctrine 2 中的代理、存储库和服务有什么区别?

转载 作者:行者123 更新时间:2023-12-04 10:02:08 27 4
gpt4 key购买 nike

我想知道这三种模式有什么区别。

据我所理解:

  • 代理仅用于延迟加载实体
  • 存储库用于向模型添加逻辑(宽度为 DQL 语句的一些快捷方法)
  • 服务用于依赖模型和 Controller

  • 对于这最后一个服务,我不关注 Doctrine 2 项目作为存储库背后的持久性系统,因为它使用带有 DBAL 的 ORM。

    我读到代理可用于向实体添加逻辑,那么与存储库有什么区别?

    顺便说一句,我的实体应该只包含其属性的公共(public) getter/setter 吗?这是正确的吗?

    我有点迷失在这里。

    你有什么具体的例子吗?

    最佳答案

    代理是对某物的引用。

    假设您正在创建一个用户,并且一个用户附加了一个组。
    如果您没有代理支持,则需要在 DB 上为 Group 进行 fetch 才能使用实体。这是一个可能的代码:

    $group = $em->getRepository('Group')->findOneById(1);

    借助对代理的支持,您无需进行数据库查找。代理被认为是对数据库事物的引用,而不是实际获取它。你的代码:
    $group = $em->getReference('Group', 1);

    使用 Proxy 的好处很简单……如果您需要获取(例如)组名,只需正常进行:$group->getName();代理将初始化实体(按需获取数据库)。

    存储库是一种数据操作的东西。你用它来管理你的实体。因此,您可以使用 findById、findOneByEmail 等。您还可以扩展其基本功能并实现自己的管理实体的方法,例如:saveUser、retrieveMostActiveUsers。

    服务在内部使用存储库,但它包含更多验证并且可能与 > 1 个存储库交互。例如,在您成功保存用户后,您想向他发送一封祝贺电子邮件。因此,在 UserService 的 createUser 方法中,您检索 NotificationService 并发送新的注册电子邮件。

    你现在清楚了吗? =)

    干杯,

    关于model - Doctrine 2 中的代理、存储库和服务有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5210463/

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