DataMapper vs ActiveRecord?

В каких случаях лучше использовать DM в Rail приложении вместо ActiveRecord? Беглое знакомство с datamapper.org/why.html меня не убедило, что это будет удобнее AR. Может быть DM быстрее? опять из того что я успел прочитать мне этого не видно.

Есть проект на Rails 3 c DM: вообще есть ли смысл мигрировать с ROR 3 на ROR 4 с учетом того, что как я понял DM нет для Rails 4, но там есть ROM, или вообще от DM отказаться и сделать на AR?

Вообщем хотелось бы получить развернутый ответ мотивации использовать DM в Rails приложении с реляционной БД.
  • Вопрос задан
  • 3880 просмотров
Пригласить эксперта
Ответы на вопрос 4
Расскажу что знаю.

DataMapper уже не разрабатывается, разработчики этой библиотеки переименовали DM в ROM сейчас активно пилят его https://github.com/rom-rb
Пруф - https://twitter.com/datamapper/status/342595504909...

Так что для себя лично я решил не использовать DataMapper в проектах, хоть библиотека мне очень нравится в сравнении ActiveRecords, так как более понятно как это работает, можно просто описать модели без написания миграций и DM построит таблицы.

К ActiveRecords есть у меня какая-то необъяснимая неприязнь. Может потому, что я не использую Rails, а пишу на Sinatra.

Использую Sequel (sequel.jeremyevans.net). Долго сомневался мигрировать на него с DM, но как перешёл ни капли не пожалел - ЭТО ВОЛШЕБНО! Супер библиотека с кучей плагинов и возможностями, особенно при использовании PostgreSQL. Кстати, разработчики ROM решили при использовании SQL хранилица тоже использовать Sequel.

Вот видео доклад по Sequel на русском языке - www.youtube.com/watch?v=95TflPVKSI0
Ответ написан
Комментировать
DataMapper это не только гем, но шаблон проектирования, который часто противопоставляется шаблону ActiveRecord (см. труды Фаулера). Вне rails сообщества эти названия известны именно в таком контексте.
Однако.
Во первых гем DataMapper, не самая лучшая реализация шаблона DataMapper, уходящая куда-то вкось. Во вторых он просто уже не разрабатывается.
Гем ActiveRecord, напротив, едва ли не эталон всеобщей продуманности в мелочах и конечно (как иначе), ActiveRecord разрабатывается активно.

Присоединяясь к ответу Роман Крылов, скажу что лучший способ реализовать DataMapper в рельсах - построить его вокруг Sequel, прекрасной библиотеки доступа к БД, лишенной многих недостатков ActiveRecord связанных с его врожденной негибкостью (convention over configuration, ага) и проблем с производительностью (подгружает иногда что-то лишнее, редко, но в особых случая это может быть важно).

Когда использовать одно, а когда другое?
Если у вас есть возможность проектировать базу данных в соответствии с конвенциями Rails - однозначно используйте ActiveRecord. Вы сэкономите много сил и средств.
Если вы строите проект над готовой базой или если структура проектируемой БД слишком сложна - используйте Sequel, делайте преобразователи данных, стройте абстрактную, отвязанную от БД объектную модель.
Ответ написан
Комментировать
Вообще пребывал в полной уверенности что Datamapper все, однако есть даже несколько коммитов в этом году. Я убежден, что не следует завязывать проект на чем-то что так смутно поддерживается.
Ответ написан
trevoga_su
@trevoga_su
реализовал DataMapper у себя в php коде. остался доволен. Бизнес-логика отдельно, запросы отдельно. Очень классно. Модели предметной обаости почти ничего не знают о СУБД, а мапперы только и делают, что гоняют объекты в базу и обратно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы