Рефакторинг Rails 4 before_action для скорости кода с повторно используемыми методами контроллера

Я уже некоторое время изучаю Rails, и я хотел бы знать, как лучше всего включить многократно используемые методы в другие методы. Я использую before_action для некоторых, но мне интересно, должен ли я преобразовать свой код, который выглядит как "Рис.A", чтобы использовать больше перед действиями (Рис. B). Это лучшая практика и улучшает ли она скорость?

Fig.A
SomeController.rb

def some_action
  #logic
end

def my_method
 some_action
  #logic
end

def my_other_method
 some_action
  #logic
 end

по сравнению с использованием до действия

Fig.B
SomeController.rb

before_action  :some_action, only: [:my_method, :my_other_method]

def some_action
  #logic
end

def my_method
  #logic
end

def my_other_method
  #logic
end

Я спрашиваю, поскольку я пытаюсь справиться с лучшими методами и чистым кодом. Какой предпочтительный способ?

1 ответ

Решение

Вы задали два разных вопроса здесь. Хороший способ абстрагировать методы для их повторного использования - это модуль или суперкласс, от которого ваш подкласс наследует поведение. Подумайте о модели rails, наследующей ActiveRecord::Base, и о том, как она наследует методы доступа к базе данных и т. Д.

Вы, вероятно, говорите, что вы определили свои методы перед действием в application_controller, что хорошо, но ограничение их для использования в определенных контроллерах не обязательно улучшит производительность. Если они тяжелые и вы хотите, чтобы их экземпляры были только на определенных контроллерах, лучше было бы использовать модули, но они должны быть достаточно большими и сложными, чтобы повысить производительность контроллеров, чтобы их не включать.

Другие вопросы по тегам