Slide 1

Slide 1 text

Rails Concerns или “забота” о коде Владимир Дементьев, 04.2015

Slide 2

Slide 2 text

План — ActiveSupport::Concern — Models — Controllers — Routes 2

Slide 3

Slide 3 text

Concern = Module + … 3

Slide 4

Slide 4 text

Concern = Module + SoC* * Separation of Concerns – разделение ответственности 4

Slide 5

Slide 5 text

Module != Concern 5

Slide 6

Slide 6 text

Module == Concern 6

Slide 7

Slide 7 text

ActiveSupport::Concern 7

Slide 8

Slide 8 text

ActiveSupport::Concern 8

Slide 9

Slide 9 text

ActiveSupport::Concern — синтаксический сахар — менеджер зависимостей 9

Slide 10

Slide 10 text

AS::Concern – менеджер зависимостей 10

Slide 11

Slide 11 text

Консерны моделей — разделение кода между моделями — извлечение несущественного кода из модели 11

Slide 12

Slide 12 text

https://signalvnoise.com/posts/3372-put-chubby-models-on-a-diet-with-concerns “Put chubby models on a diet with concerns”* DHH, Dec, 2012 * Посади свои пухлые модели на диету с консернами 12

Slide 13

Slide 13 text

Консерны моделей: разделение кода 13

Slide 14

Slide 14 text

Консерны моделей: извлечение кода 14

Slide 15

Slide 15 text

Консерны моделей: полиморфизм 15

Slide 16

Slide 16 text

Консерны контроллеров — соответствуют консернам моделей — вспомогательный функционал (рендеринг, авторизация) 16

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

18 Консерны контроллеров

Slide 19

Slide 19 text

19 Консерны контроллеров

Slide 20

Slide 20 text

20 Консерны контроллеров

Slide 21

Slide 21 text

21 Консерны: роутинг

Slide 22

Slide 22 text

22 Консерны: Commentable

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

Консерны: тесты RSpec Shared Examples https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples 24

Slide 25

Slide 25 text

Shared Examples: Модели 25

Slide 26

Slide 26 text

SE: Контроллеры 26

Slide 27

Slide 27 text

Консерны моделей: тесты with_model gem https://github.com/Casecommons/with_model 27

Slide 28

Slide 28 text

Консерны моделей: тесты 28

Slide 29

Slide 29 text

Анонимный контроллер 29

Slide 30

Slide 30 text

Naming convention*: Example 30 * соглашение об именовании Типичная ошибка:

Slide 31

Slide 31 text

Naming convention: Example 31 Тип Правило Пример Модель Ability (-able) Archivable Контроллер Present Perfect (-ed) Archived Роуты Model/Controller archivable

Slide 32

Slide 32 text

Namespaces: Example 32

Slide 33

Slide 33 text

Naming convention: Example 33 Тип Правило Пример Модель Ability (-able) Archivable Контроллер Present Perfect (-ed) Archived Роуты Model/Controller archivable Декораторы Has- HasArchive Сериалайзеры With- WithArchive with_model With + Model WithArchivable

Slide 34

Slide 34 text

Вопросы