Вы провели рефакторинг с ActiveRecord на DataMapper? Какие условия побудили к переходу? Меня в первую очередь интересуют веб-приложения, но я хотел бы знать проблемы, которые сопровождают такой шаг в любой среде.


Мне очень нравится шаблон ActiveRecord из-за его простоты. Однако я отхожу от этого для более крупных веб-приложений. Я обнаружил, что по мере того, как проект на основе ActiveRecord становится более сложным, объекты ActiveRecord становятся большими и перегруженными слишком большим количеством кода.
Благодаря введению шаблона репозитория (по сути, Data Mapper) классы модели предметной области становятся проще, а логика сопоставления данных / доступа к данным сохраняется отдельно.
Кроме того, довольно сложно (невозможно?) Издеваться над объектами ActiveRecord из-за того, что они используют статические методы.
Я запутался - почему активная запись обязательно использует статические методы?
Реализации AR, которые я видел (Ruby AR и Castle Active Record для .NET), все используют статические методы для запросов (Person.FindById (123)). Если я правильно помню из PoEAA, это часть определения шаблона Active Record. См .: en.wikipedia.org/wiki/Active_record_pattern
Я написал интегрированную систему сборки поверх PDE-Build, используя поход. Изначально я использовал ActiveRecord, но мне понадобился неблокирующий потокобезопасный доступ к базе данных, поэтому я переключился на использование Data Mapper.
Я был изрядно огорчен ошибками, но последние версии кажутся довольно стабильными.
Я использую платформу, которая предоставляет Table Data Gateway и Row Data Gateway как встроенные классы, которые легко использовать, потому что все, что мне нужно указать, это первичный ключ (если не просто id) и имя таблицы (если нет то же, что и название класса). Однако недавно в процессе рефакторинга я обнаружил, что эти шаблоны начинают ухудшаться в тот момент, когда должно произойти более сложное сопоставление между доменом и базой данных.
Например, в настоящее время я занимаюсь рефакторингом кода для одного веб-сайта, чтобы использовать Data Mapper, чтобы я мог использовать наследование одной таблицы (использует сопоставление наследования). По сути, каждый раз, когда отношения между базой данных и доменом становятся более сложными, чем взаимно однозначные, я настоятельно рекомендую использовать Data Mappers.
Интересная идея! Спасибо Майк