activerecord callbacks. Готовим правильно

52
ActiveRecord::Callbacks Готовим правильно Павел Габриель / @alovak

Upload: -

Post on 05-Jul-2015

258 views

Category:

Technology


1 download

DESCRIPTION

Павел Габриэль (Ruby/Rails разработчик, Agile-тренер, коуч) Доклад: ActiveRecord Callbacks. Готовим правильно.

TRANSCRIPT

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

ActiveRecord::Callbacks

Готовим правильно

Павел Габриель / @alovak

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

AR::Callbacks

before_create / save / update / validate

after_*

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

Что не так с AR::Callbacks?

Page 5: ActiveRecord 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

Page 6: ActiveRecord Callbacks. Готовим правильно
Page 7: ActiveRecord Callbacks. Готовим правильно
Page 8: ActiveRecord Callbacks. Готовим правильно
Page 9: ActiveRecord Callbacks. Готовим правильно
Page 10: ActiveRecord Callbacks. Готовим правильно
Page 11: ActiveRecord Callbacks. Готовим правильно

“That’s Ruby, which gives you

immense power to do, you know,

pretty much anything, ever”

— Ernie Miller

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

Google

“Are ActiveRecord Callbacks Any Good?”

“ActiveRecord Callbacks are Unreasonable”

“Rails, callbacks, workers, and the race you

never expected to lose”

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

“ActiveRecord's Callbacks

Ruined My Life”

Page 14: ActiveRecord Callbacks. Готовим правильно
Page 15: ActiveRecord Callbacks. Готовим правильно
Page 16: ActiveRecord Callbacks. Готовим правильно
Page 17: ActiveRecord Callbacks. Готовим правильно
Page 18: ActiveRecord Callbacks. Готовим правильно
Page 19: ActiveRecord Callbacks. Готовим правильно

В чем же проблема?

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

Проблема?

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

Single Responsibility Principle

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

“A class should do the smallest

possible useful thing; that is,

it should have

a single responsibility.”

— Sandi Metz

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

SRP Violation

К лишнему весу ..

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

SRP Violation

К усложнению кода

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

SRP Violation

К сложным тестам

Невозможности повторного

использования

И т.д.

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

Варианты решений

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

Вариант с Dependency

Injection

Page 28: ActiveRecord Callbacks. Готовим правильно
Page 29: ActiveRecord Callbacks. Готовим правильно
Page 30: ActiveRecord Callbacks. Готовим правильно
Page 31: ActiveRecord Callbacks. Готовим правильно
Page 32: ActiveRecord Callbacks. Готовим правильно
Page 33: ActiveRecord Callbacks. Готовим правильно

Вариант с Service

Page 34: ActiveRecord Callbacks. Готовим правильно
Page 35: ActiveRecord Callbacks. Готовим правильно
Page 36: ActiveRecord Callbacks. Готовим правильно
Page 37: ActiveRecord Callbacks. Готовим правильно

Вариант с Events/Signals

Page 38: ActiveRecord Callbacks. Готовим правильно
Page 39: ActiveRecord Callbacks. Готовим правильно
Page 40: ActiveRecord Callbacks. Готовим правильно
Page 41: ActiveRecord Callbacks. Готовим правильно
Page 42: ActiveRecord Callbacks. Готовим правильно

ActiveSupport::Notifications

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

Wisper (gem)

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

• Минимизируйте зависимости с

помощью Dependency Injection

• Объединяйте несколько моделей в

Service

• Используйте Events/Signals

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

“Rails makes it natural and easy to build

large, well-designed OOP systems.”

— ????????

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

“Rails makes it natural and easy to build

large, well-designed OOP systems.”

— Nobody

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

Rails has no brain;

use your own!

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

Спасибо!

[email protected]