【发布时间】:2011-12-04 16:29:31
【问题描述】:
假设我有一个博客应用程序。
作者可以通过提供指向网络上现有图片的网址的链接或上传新图片来将多张图片添加到帖子中。
我希望能够从图像(上传的或 url)回溯到使用该图像的所有帖子,以及从特定帖子回溯到该帖子中的所有图像(例如 - 所以我可以删除图像是非法的和/或暂停使用它们的帖子,直到作者修复帖子)。
但是,我对上传的图片和 url 图片使用不同的实体 - 上传的图片比 url 图片包含更多关于图片的数据。
这会导致更复杂的代码,因为在每次保存已编辑的帖子时,我需要检查哪种是特定图像(在我需要运行的帖子中的所有图像中),然后创建或更新它记录,并分配给post实体中的关系字段。
所以...假设我有一个UploadedImage 和一个UrlImage 实体,我考虑在post 实体中有一个setImages 方法,该方法检查它获得的每张图片,如果它是上传的或url ,然后调用setUploadedImages 或setUrlImages。
但是,我需要某种虚拟的images 存储库,以同样的方式加载图像。
听起来有点复杂,我想知道:
- 我怎样才能拥有一个虚拟的学说实体(及其存储库和所有)?
- 有更好的设计吗?
【问题讨论】:
-
你考虑过使用Inheritance Mapping吗?
-
@Orbling 以哪种方式?以及它将如何解决决定如何处理每种类型的“问题”?
-
嗯,通过使用继承映射,您可以拥有一个代表这两种类型的超类,然后可以将它们一起处理。根据子类型,它们可以有相同的方法并做不同的事情。
-
Doron 是正确的,这正是继承的意义所在。您有一个基实体类(或映射的超类),它提供两种类型共有的所有功能。然后,UrlImage 和 UploadedImage 都可以提供自己的方法实现,例如
getUrl()。您还可以使用其他将图像(无论哪种类型)作为参数的方法,例如 'flagAllPostsContainingImage($Image)` -
对我个人来说,为什么 Post 实体应该以某种方式连接到 UploadedImage 很有趣?它应该只关心 UrlImage
标签: php database-design associations doctrine-orm