Я работаю с Doctrine2 впервые, но я думаю, что этот вопрос достаточно общий, чтобы не зависеть от конкретного ORM.
Должны ли сущности в шаблоне Data Mapper знать - и использовать - Mapper ?
У меня есть несколько конкретных примеров, но все они, похоже, сводятся к одному и тому же общему вопросу.
Если я имею дело с данными из внешнего источника - например, User
имеет много Messages
- и внешний источник просто предоставляет последние несколько сущностей (например, канал RSS), как может $user->addMessage($message)
проверить для дубликатов, если он либо не знает о Mapper, либо не «ищет» в коллекции (кажется, что это неэффективно).
Конечно, контроллер или сценарий транзакции могут проверять наличие дубликатов перед добавлением сообщения пользователю - но это не совсем правильно и может привести к дублированию кода.
Если у меня большая коллекция - опять же User
со многими Messages
- как сущность User
может обеспечить ограничение и разбиение на страницы для коллекции без фактической передачи вызова Mapper?
Опять же, Контроллер или Сценарий транзакции или все, что использует сущность, может использовать Mapper напрямую для получения коллекции User
Messages
, ограниченной количеством, диапазоном дат или другими факторами - но это тоже привести к дублированию кода.
Использует ли ответ хранилища и информирует ли их об этом Предприятие ? (По крайней мере, для Doctrine2 и любой аналогичной концепции, используемой другими ORM.) В этот момент сущность все еще относительно отделена от Mapper.