Рефакторинг 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, что хорошо, но ограничение их для использования в определенных контроллерах не обязательно улучшит производительность. Если они тяжелые и вы хотите, чтобы их экземпляры были только на определенных контроллерах, лучше было бы использовать модули, но они должны быть достаточно большими и сложными, чтобы повысить производительность контроллеров, чтобы их не включать.