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