Data Mapper отвечает лишь за связь между строкой таблицы и объектом в памяти.
Repository же отвечает за выборку объектов из БД. То есть скорее поиск. Ну или не из БД. Это просто штука, умеющая возвращать коллекцию объектов откуда-нибудь.
Репозиторий ведь не только за выборку отвечает. Он и сохранять умеет.
Т.е. раница только в абстрактности? Репозиторий с чем угодно может работать, а дата-маппер только с БД?
nuhena: Сохранять репозиторий обычно не умеет. Не совсем его ответственность.
Нет, отличие именно в том, что data mapper обеспечивает связь между сущностью где-то (обычно БД) с объектом в памяти.
Repository же занимается именно "работой" с какой-то коллекцией.
nuhena:
Связь -- берём какие-то сырые данные (например, массив. Ассоциативный или обычный). Затем делаем из этого объект. Ну или наоборот. Где-то тут ответственность дата маппера и заканчивается.
Репозиторий обычно использует дата маппер в результате своей работы. Но в целом -- не обязан.
Если совсем по простому, то
Репозитарий - это хранилище информации (БД, файлы, ...)
DataMapper - тот, кто умеет эту информацию транслировать в объекты.
Тогда DataMapper находится в слое репозитария.
Вы же из хранилища получаете сырые данные и по определенным правилам собираете сущности.
Вот этот перегон сырых данных в сущности по неким правилам и есть DataMapper.