Является ли Data Mapper более современной тенденцией, чем Active Record? - PullRequest
11 голосов
/ 30 сентября 2010

Я встречал пару ORM, которые недавно объявили, что планируют перевести свою реализацию с Active Record на Data Mapper. Мои знания по этому предмету очень ограничены. Таким образом, вопрос для тех, кто знает лучше, является ли Data Mapper более новым, чем Active Record? Было ли это когда началось движение Active Record? Как они связаны друг с другом?

Наконец, поскольку я не являюсь сотрудником базы данных и мало знаю об этом предмете, должен ли я следовать ORM, который переходит к реализации Data Mapper, как это для меня, как для человека, пишущего программное обеспечение (не для пользователя данных)?

Ответы [ 2 ]

22 голосов
/ 30 сентября 2010

DataMapper не более современный или более новый, но больше подходит для ORM.

Основная причина, по которой люди меняются, заключается в том, что ActiveRecord не подходит для хорошего ORM.AR упаковывает строку в таблицу или представление базы данных, инкапсулирует доступ к базе данных и добавляет логику домена к этим данным .Таким образом, по определению, AR представляет собой представление базы данных 1: 1, что делает его особенно подходящим для простого CRUD.

Некоторые AR добавили выборку связанных данных, что заставило людей поверить, что AR - это ORM.Это не.Задача ORM - устранить несоответствие между объектным реляционным импедансом между структурой вашей базы данных и объектами вашего домена.При использовании AR вы не решаете это несоответствие импеданса, потому что ваш AR представляет строку базы данных, а не правильную структуру ОО.Вы привязываете свою структуру БД к своим объектам.Некоторые из объектно-реляционных поведенческих паттернов все же могут быть применены (например, ленивая загрузка).

Другая причина, по которой AR часто критикуется, состоит в том, что он смешивает две проблемы: бизнес-логику и логику доступа к БД.Это приводит к нежелательному соединению и может привести к снижению ремонтопригодности и гибкости в более крупных приложениях.Между двумя слоями нет изоляции.Связывание всегда приводит к меньшей гибкости.

A DataMapper , с другой стороны перемещает данные между объектами и базой данных, сохраняя их независимыми друг от друга и от самого преобразователя. Хотя это сложнее в реализации, оно обеспечивает гораздо более гибкий дизайн в вашем приложении.Ваши доменные объекты больше не должны соответствовать структуре БД.Уровень DAL и домена разделены.

0 голосов
/ 12 мая 2018

Несмотря на то, что посту 8 лет, вопрос по-прежнему действует в 2018 году.

Активная запись - Анти шаблон Остерегайтесь этого. Это создает очень тесную связь между кодом и базой данных. Это не может быть проблемой для небольших простых проектов. Тем не менее, я бы настоятельно рекомендовал не использовать его в чем-то большем.

Хороший дизайн ООП сделан в слоях. Уровень ввода, уровень обслуживания, уровень хранилища, отображение данных и БД - простой пример. Вы не должны смешивать входной слой с БД. Как это можно сделать? Например, в Laravel вы можете использовать правило валидатора, например:

'email' => 'exists:staff,email'

Проверяет, существует ли электронная почта в таблице сотрудников. Это полная ООП бессмысленная. Он связывает ваш верхний слой с именем столбца БД. Я не могу представить лучшего примера плохого дизайна ООП.

Суть в том, что если вы создаете простой сайт с 2-3 таблицами, например блог, активная запись может не быть проблемой. Для чего-то большего, перейдите на Data Mapper и будьте осторожны с принципами ООП, такими как IoC, SoC и т. Д.

...