Идея модели заключается в том, чтобы обернуть логический набор данных внутри вашего кода.
Идея DataMapper состоит в том, чтобы связать этот набор данных на уровне приложения с тем, как вы его храните.
Для многих реализаций ActiveRecord платформа не обеспечивает такое разделение намерений, и это может привести к проблемам. Например, модель BlogPost может заключать в себе основную информацию в блоге, например
- название
- автор
- корпус
- date_posted
Но, возможно, вы также хотите, чтобы оно содержало что-то вроде:
- number_of_reads
- number_of_likes
Теперь вы можете хранить все эти данные в одной таблице MySQL для начала, но по мере роста вашего блога и становления супер-знаменитостью вы обнаруживаете, что ваши статистические данные получают очень много хитов, и вы хотите переместить это на отдельный сервер базы данных.
Как бы вы перенесли эти поля объектов BlogPost в другое хранилище данных без изменения кода приложения?
С помощью DataMapper вы можете изменить способ сохранения объекта в базе (-ах) и способ его загрузки из базы (-ов). Это позволяет настроить механизм хранения без необходимости изменять фактический сбор информации, на которую опирается ваше приложение.