ActiveRecord::CallbacksГотовим правильно
Павел Габриель / @alovak
AR::Callbacks
before_create / save / update / validateafter_*
Что не так с AR::Callbacks?
“That’s a total of twelve callbacks,
which gives you immense power to react and prepare for each state
in the ActiveRecord life cycle.”
— active_record/callbacks.rb
“That’s Ruby, which gives you
immense power to do, you know,pretty much anything, ever”
— Ernie Miller
“Are ActiveRecord Callbacks Any Good?”
“ActiveRecord Callbacks are Unreasonable”
“Rails, callbacks, workers, and the race you never expected to lose”
“ActiveRecord's Callbacks Ruined My Life”
В чем же проблема?
Проблема?
Single Responsibility Principle
“A class should do the smallest
possible useful thing; that is,it should have
a single responsibility.”
— Sandi Metz
SRP Violation
К лишнему весу ..
SRP Violation
К усложнению кода
SRP Violation
К сложным тестам
Невозможности повторного использования
И т.д.
Варианты решений
Вариант с Dependency Injection
Вариант с Service
Вариант с Events/Signals
ActiveSupport::Notifications
Wisper (gem)
• Минимизируйте зависимости с помощью Dependency Injection
• Объединяйте несколько моделей в Service
• Используйте Events/Signals
“Rails makes it natural and easy to
build large, well-designed OOP systems.”
— ????????
“Rails makes it natural and easy to
build large, well-designed OOP systems.”
— Nobody
Rails has no brain; use your own!
Спасибо!
Top Related