Почему ActiveRecord вместо MySql API - PullRequest
2 голосов
/ 02 октября 2008

Я давно занимаюсь разработкой веб-приложений, и с MySql я вполне доволен, на самом деле, так как многие из них используют какой-то вид SQL почти каждый день. Мне нравится синтаксис и у меня ноль проблем при написании запросов или оптимизации моих таблиц. Я наслаждался этим mysql api .

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

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

Ответы [ 3 ]

3 голосов
/ 02 октября 2008

Вы правы, что скрытие 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, но все же. Иметь вариант приятно.

1 голос
/ 02 октября 2008

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

Вот статья о шаблоне Active Record .

0 голосов
/ 02 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...