我是第一次使用Doctrine2,但我认为这个问题足够通用,不依赖于特定的ORM。
在数据映射器模式中,实体是否应该知道 - 并使用 - 映射器?
我有一些具体的例子,但它们似乎都可以归结为相同的一般问题。
例如,如果我正在处理来自外部源的数据 - 例如一个用户有许多消息 - 而外部源仅提供最新的一些实体(如RSS提要),那么除非它知道映射器或者搜索整个集合查找重复项(似乎效率低下),否则如何检查重复项?
当然,控制器或事务脚本可以在将消息添加到用户之前检查重复项 - 但这似乎不太好,会导致代码重复。
如果我有一个大的集合 - 再次是一个用户和许多消息 - 用户实体如何为集合提供限制和分页而不实际代理映射器调用?
同样,控制器或事务脚本或者使用实体的任何其他东西都可以直接使用映射器检索由计数、日期范围或其他因素限制的用户消息集合 - 但这也会导致代码重复。
答案是使用仓库并使实体意识到它们吗? (至少对于Doctrine2和其他ORM使用的类似概念来说。)此时,实体仍然相对独立于映射器。
在数据映射器模式中,实体是否应该知道 - 并使用 - 映射器?
我有一些具体的例子,但它们似乎都可以归结为相同的一般问题。
例如,如果我正在处理来自外部源的数据 - 例如一个用户有许多消息 - 而外部源仅提供最新的一些实体(如RSS提要),那么除非它知道映射器或者搜索整个集合查找重复项(似乎效率低下),否则如何检查重复项?
当然,控制器或事务脚本可以在将消息添加到用户之前检查重复项 - 但这似乎不太好,会导致代码重复。
如果我有一个大的集合 - 再次是一个用户和许多消息 - 用户实体如何为集合提供限制和分页而不实际代理映射器调用?
同样,控制器或事务脚本或者使用实体的任何其他东西都可以直接使用映射器检索由计数、日期范围或其他因素限制的用户消息集合 - 但这也会导致代码重复。
答案是使用仓库并使实体意识到它们吗? (至少对于Doctrine2和其他ORM使用的类似概念来说。)此时,实体仍然相对独立于映射器。