减少实体中的耦合

问题描述

| 我正在寻找减少在我为Symfony2框架编写的消息传递包中耦合的合适方法,以便可以在应用程序之间轻松使用它。 Message实体的每个实例都应该有一个发送者和一个接收者“ 0”,我可以在属性的设置方法中要求它们很好。但是,在建立ORM关系时,似乎我必须专门设置一个targetEntity(例如1),这意味着在不同应用程序中对Message实体的所有进一步使用都将需要代码更改,或者将它们塞入使用用户实体,在我看来这似乎不在消息传递包的范围之内。 关于在这种情况下如何减少耦合的任何建议/最佳实践? 编辑:我尝试设置带有扩展名的全局参数,并在批注中使用它,例如
@ORM\\ManyToOne(targetEntity=\"%my.entity%\")
,但是批注解析器似乎不转换参数,因为字符串被解释为文字,这当然会失败。     

解决方法

我最终选择的解决方案是创建一个MessengerIdentity,该对象存储在数据库中,该对象接受一个对象并存储其类名和标识符。然后,我使用LifecycleEvent加载对MessengerIdentity中存储的实体的引用,因此仍可能出现类似于“ 3”的情况。 您可以在github上看到我的实现(尤其是实体和Doctrine事件侦听器)...您还可以在此处查看来自doctrine2用户组的讨论。 编辑:经过进一步的考虑,我决定我不喜欢上面讨论的实现(一方面,我本质上是将代码复制粘贴到其他项目中,这感觉非常混乱并且违反了DRY),并且因此我重构了代码,使Message实体是一个抽象的映射超类,具有业务逻辑将需要的抽象方法,该方法引用了发送者和接收者。 现在由最终开发人员来创建Message实体的最终实现,而基类甚至都没有涉及发送者和接收者的实现,这实现了我期望的减少捆绑对包的依赖的预期结果。特定的用户类别。     ,您可以创建一个包含所有业务逻辑的Model对象,然后创建一个实体,该实体扩展了模型,但向其中添加了您的实体管理器代码和原则注释。这就是FOSUserBundle的工作方式。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...