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