ݺߣ

ݺߣShare a Scribd company logo
ActiveRecord::Callbacks
Готовим правильно
Павел Габриель / @alovak
AR::Callbacks
before_create / save / update / validate
after_*
ActiveRecord::Callbacks. Готовим правильно.
Что не так с 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
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
“That’s Ruby, which gives you
immense power to do, you know,
pretty much anything, ever”
— Ernie Miller
Google
“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 ڱ”
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
В чем же проблема?
Проблема? 
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
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
Вариант с Service
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
Вариант с Events/Signals
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
ActiveSupport::Notifications
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
Wisper (gem)
ActiveRecord::Callbacks. Готовим правильно.
ActiveRecord::Callbacks. Готовим правильно.
• Минимизируйте зависимости с
помощью 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!
Спасибо!
alovak@gmail.com

More Related Content

ActiveRecord::Callbacks. Готовим правильно.