Вопрос

Некоторое время я занимаюсь разработкой веб-приложений, и мне вполне комфортно работать с mySql, фактически, как и многие другие, я использую ту или иную форму SQL почти каждый день.Мне нравится синтаксис, и у меня нет проблем с написанием запросов или оптимизацией таблиц.Мне понравился этот MySQL API.

Меня беспокоит то, что Ruby on Rails использует ActiveRecord и переносит все, поэтому вы можете использовать функции для запроса базы данных.Я полагаю, что идея заключается в том, что вам «никогда больше не придется смотреть на SQL».Может быть, это не KISS (будьте проще, глупее), но действительно ли интерфейс ActiveRecord лучший?Если да, то почему?

Полезна ли разработка без необходимости написания оператора SQL?Что, если вам когда-нибудь придется искать что-то, что еще не определено как функция рельсов?Я знаю, что у них есть функция, которая позволяет мне выполнять собственный запрос.Думаю, на самом деле я хочу знать, что люди думают о преимуществах использования ActiveRecord перед MySQL, и если кто-то чувствует себя так же, как я, возможно, это будет для сообщества рельсов тем же, чем калькулятор был для математического сообщества, и некоторые люди могут забыть, как делать длинные разделение.

Это было полезно?

Решение

Вы правы в том, что сокрытие SQL за слоем ActiveRecord означает, что люди могут забыть проверить сгенерированный SQL.Меня самого это укусило:отсутствующие индексы, неэффективные запросы и т. д.

ActiveRecord позволяет делать простые вещи проще:

Post.find(1)

против

SELECT * FROM posts WHERE posts.id = 1

Вам, разработчику, придется меньше печатать и, следовательно, у вас будет меньше шансов на ошибку.

Проверка — это еще одна вещь, которую ActiveRecord упрощает.В любом случае вам придется это сделать, так почему бы не найти простой способ сделать это?Избавиться от повторяющихся, скучных частей?

class Post < ActiveRecord::Base
  validates_presence_of :title
  validates_length_of :title, :maximum => 80
end

против

if params[:post][:title].blank? then
  # complain
elsif params[:post][:title].length > 80 then
  # complain again
end

Опять же, легко указать, легко проверить.Хотите больше подтверждений?Одна строка для добавления в модель ActiveRecord.Замысловатый код с множеством условий всегда сложнее отлаживать и тестировать.Почему бы не облегчить вам задачу?

Последнее, что мне действительно нравится в ActiveRecord вместо SQL, — это обратные вызовы.Обратные вызовы можно эмулировать с помощью триггеров SQL (которые доступны только в MySQL 5.0 или выше), тогда как в ActiveRecord с тех пор были обратные вызовы (я начал с версии 0.13).

Обобщить:

  • ActiveRecord делает простые вещи проще;
  • ActiveRecord удаляет скучные, повторяющиеся части;
  • ActiveRecord не мешает вам написание собственного SQL (обычно из соображений производительности) и, наконец;
  • ActiveRecord полностью переносим для большинства СУБД, а сам SQL — нет (иногда).

Я знаю, что в вашем случае вы говорите конкретно о MySQL, но все же.Иметь такую ​​возможность – это хорошо.

Другие советы

Идея здесь заключается в том, что, помещая логику БД в активные записи, вы имеете дело с кодом SQL в одном месте, а не распределяете его по всему приложению.Это упрощает соблюдение принципа единой ответственности на различных уровнях вашего приложения (что у объекта должна быть только одна причина для изменения).

Вот статья о паттерне Active Record.

Отказ от SQL поможет вам, когда вы решите изменить схему базы данных.Абстракция также необходима для самых разных вещей, например, для проверки.Я не имею в виду, что вы не можете писать SQL:вы всегда можете это сделать, если почувствуете в этом необходимость.Но вам не обязательно писать запрос из 5 строк, где все, что вам нужно, это user.save.Философия Rails — избегать ненужного кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top