Показаны сообщения с ярлыком Ruby on Rails. Показать все сообщения
Показаны сообщения с ярлыком Ruby on Rails. Показать все сообщения

Простота против лёгкости

Вот как работает Rails, классический пример:

User.create(params[:user])

Вы видите простую строку кода, и вы можете сразу сказать(если вы знаете, является ли User моделью ActiveRecord), что она делает. Проблема здесь заключается в том, что люди путают простоту с удобством. Эту строку удобно/легко написать в вашем контролере и всё сразу заработает, не так ли?

Однако, эта строка кода не является простой, её легко написать, но код "под капотом" чрезвычайно сложен, так как:

  • params должны пройти через СУБД-специфические приведения типов
  • params должны быть валидированы
  • params могут быть изменены с помощью колбеков, включая потенциальные вызовы внешних систем, вызывающие побочные эффекты
  • невалидное состояние приводит к установке сообщений об ошибках, которые зависят от внешних систем (например I18n)
  • валидные params должны повлиять на состояние объекта, и возможно изменить состояние ассоциированных с ним объектов
  • один объект или весь граф объекта должен быть сохранен в базе данных