【发布时间】:2011-04-13 21:55:12
【问题描述】:
我是第一次使用 Doctrine2,但我认为这个问题足够通用,不依赖于特定的 ORM。
Data Mapper 模式中的实体是否应该了解并使用 - Mapper?
我有几个具体的例子,但它们似乎都归结为同一个一般性问题。
如果我正在处理来自外部源的数据 - 例如,User 有许多 Messages - 并且外部源仅提供最新的几个实体(如 RSS 提要),$user->addMessage($message) 如何检查对于重复项,除非它知道 Mapper,或者它在集合中“搜索”(似乎是一种低效的做法)。
当然,控制器或事务脚本可以在向用户添加消息之前检查重复项 - 但这似乎不太正确,并且会导致代码重复。
如果我有一个大型集合 - 又是一个 User 和许多 Messages - User 实体如何在不实际代理 Mapper 调用的情况下为集合提供限制和分页?
同样,控制器或事务脚本或任何使用实体的东西都可以直接使用映射器来检索受计数、日期范围或其他因素限制的User 的Messages 的集合——但这也将导致代码重复。
答案是否使用存储库并让实体了解它们? (至少对于 Doctrine2,以及其他 ORM 使用的任何类似概念。)此时,Entity 仍然与 Mapper 相对分离。
【问题讨论】:
标签: php design-patterns oop orm datamapper