Pro*_*tic 7 php symfony doctrine-orm
我正在寻找一种适当的方法来减少我为Symfony2框架编写的消息传递包中的耦合,以便我可以在应用程序之间轻松使用它.
Message实体的每个实例都应该有一个发件人和一个收件人,instanceof Symfony\Component\Security\Core\User\UserInterface我可以在属性的setter中要求得很好.然而,在建立ORM关系,似乎我必须专门设置一个targetEntity( Foo\BarBundle\Entity\User,例如),这意味着,在不同应用中的消息实体的所有进一步的用途将要么需要一个代码的改变,或将它们鞋拔成使用一个用户实体,在我看来,它不在消息包的范围内.
关于如何在这种情况下减少耦合的任何建议/最佳实践?
编辑:我试着设置全局参数带有扩展使用,在注释,类似@ORM\ManyToOne(targetEntity="%my.entity%"),但似乎注释分析器不转换参数,因为字符串被解释为文字,其失败的,当然.
我最终确定的解决方案是创建一个存储在数据库中的 MessengerIdentity,它接受一个对象并存储其类名和标识符。然后我使用 LifecycleEvent 加载对存储在 MessengerIdentity 中的实体的引用,这样类似的事情$messenger->getSender()->getUsername仍然是可能的。
您可以在 github 上查看我的实现(特别是实体和Doctrine 事件侦听器)...您还可以在此处查看 Doctrine2 用户组的讨论。
编辑:经过进一步的考虑,我决定我不喜欢上面讨论的实现(一方面,我基本上是将代码复制粘贴到其他项目中,这感觉非常混乱并且违反了 DRY),所以我重构了代码,使 Message 实体成为一个抽象映射超类,具有业务逻辑所需的抽象方法,引用发送者和接收者。
现在由最终开发人员创建 Message 实体的最终实现,并且基类甚至不触及发送者和接收者的实现,这实现了我期望的结果,即减少包对特定用户类的依赖。
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |