我想知道这三种模式之间有什么区别。
据我所知:
对于最后这个服务,我不知道它背后的Doctrine 2项目作为存储库不知道后面的持久系统,因为它使用ORM和DBAL。
我读到代理可以用来向实体添加逻辑,那么与存储库的区别是什么?
顺便说一下,我的实体是否只包含公共getter / setter属性,只有那个?这是对的吗?
我有点迷失在这里。
你有什么具体的例子吗?
答案 0 :(得分:17)
代理是对某事的引用。
假设您正在创建用户,并且一个用户附加了一个组。 如果您没有代理支持,则需要为该组执行数据库提取以便能够使用该实体。这是一个可能的代码:
$group = $em->getRepository('Group')->findOneById(1);
支持Proxies,您无需进行数据库查找。代理被视为对DB事物的引用,而不实际获取它。你的代码:
$group = $em->getReference('Group', 1);
拥有代理的好处很简单......如果您需要获取(例如)组名称,只需正常执行:$ group-> getName();并且Proxy将初始化实体(按需提取数据库)。
存储库是一种数据操作的东西。您可以使用它来管理您的实体。所以你可以找到你的id,findOneByEmail等。你也可以扩展它的基本功能并实现管理你的实体的方法,比如:saveUser,retrieveMostActiveUsers。
服务在内部使用存储库,但它包含更多验证并可能与>进行交互。 1个存储库。例如,在您成功保存用户后,您希望向他发送Congrat电子邮件。因此,在UserService的createUser方法中,您将检索NotificationService并发送新的注册电子邮件。
现在对你说清楚了吗? =)
干杯,