Я думаю там, что действительно ли вероятным является совсем другой набор причин между тем, почему люди "ненавидят" на ActiveRecord и что является "неправильным" с ним.
По проблеме ненависти, существует много яда к чему-либо связанные направляющие. До что не так с ним, вероятно, что это похоже на всю технологию и существуют ситуации, где это - хороший выбор и ситуации, где существует лучший выбор. Ситуация, где Вы не добираетесь для использования в своих интересах большинства функций направляющих ActiveRecord, по моему опыту, состоит в том, где база данных плохо структурирована. Если Вы получаете доступ к данным без первичных ключей с вещами, которые нарушают первую нормальную форму, где существует много хранимых процедур, требуемых получить доступ к данным, Вы - более обеспеченное использование чего-то, что является больше просто оберткой SQL. Если Ваша база данных относительно хорошо структурирована, ActiveRecord позволяет Вам использовать в своих интересах это.
Для добавления к теме ответа комментаторам, которые говорят, вещи тверды в ActiveRecord с возражением фрагмента кода
, @Sam McAfee Заявляет, что Вы имеете Пользовательский класс в своем домене и должны иметь ссылки на, или наборы других объектов, уже загруженных при получении того Пользовательского объекта. Данные могут прибывать из многих различных таблиц, и шаблон ActiveRecord может сделать их действительно трудно.
user = User.find(id, :include => ["posts", "comments"])
first_post = user.posts.first
first_comment = user.comments.first
При помощи включать опции, ActiveRecord позволяет Вам переопределить лениво загружающееся поведение по умолчанию.
По возможности избегайте взлома или разветвления модуля. Взлом модуля дает вам меньшее количество проблем, связанных с «взломом ядра», а разветвление модуля (без явно превосходной архитектуры и набора функций) просто запутывает воду модуля, что еще больше затрудняет принятие эффективных решений разработчиками сайтов. о том, что использовать.
Что это за модуль? Некоторые модули предоставляют API-интерфейсы, которые можно расширить, написав собственный модуль. Существует тонны модулей, которые «расширяют» представления, основанные на API представлений . Если модуль, который вы хотите расширить, не имеет хорошего API, вы всегда можете выполнить его форк, чтобы создать версию, соответствующую вашим потребностям. Может быть, это поможет и кому-то другому.
Чтобы изменить форму, отображаемую модулем, вы можете просто создать модуль, который реализует hook_form_alter ()
или hook_form_FORM_ID_alter ()
. В большинстве случаев, когда вы хотите изменить поведение модуля, вам также необходимо изменить форму настроек, которую он использует (или любую другую форму, которую он использует, если это так).