Меня интересует, поощряет или не поощряет ли шаблон ActiveRecord, известный благодаря Ruby on Rails, использование принципов проектирования SOLID .
Например, мне кажется, что объекты ActiveRecord содержат как доменную логику, так и логику персистентности, что является нарушением единой ответственности.
object-oriented
ruby-on-rails
nicholaides
источник
источник
Ответы:
Есть некоторая действительная критика на ActiveRecord. Как всегда, дядя Боб подводит итоги :
Википедия резюмирует критику в проблеме тестируемости :
Специально для реализации Ruby on Rails Гэвин Кинг пишет (выделено мое):
Джон Янущак также пишет о реализации Ruby on Rails (выделено мной):
Еще несколько ресурсов о том, почему ActiveRecord и ORM обычно считаются антишаблоном:
ActiveRecord всегда чувствовал себя как чрезвычайно полезный антишаблон , но я согласен, что он идет против SRP и, кроме того, он идет против принципа инверсии зависимостей.
источник
(Я предполагаю, что класс ActiveRecord реализован без какой-либо возможности для внедрения зависимости).
Из личного опыта могу сказать, что шаблон ActiveRecord становится основным препятствием для написания юнит-тестов. Соединение персистентного уровня и бизнес-логики в одном «классе ActiveRecord» делает невозможным написание модульных тестов (если вы сначала не выполните рефакторинг). Поэтому единственный вариант - написание интеграционных тестов; и это не так эффективно, как юнит-тесты. Это становится серьезной проблемой, особенно если вы берете на себя проект с большим количеством классов ActiveRecord; это приводит к очень сложным интеграционным тестам, которые трудно поддерживать.
Итак, ActiveRecord в значительной степени идет против SRP и создает некоторую головную боль при обслуживании; кажется, отнимает способность писать юнит-тесты.
источник