Slide 1

Slide 1 text

Архитектурные практики в rails Кирилл Мокевнин, undev.ru

Slide 2

Slide 2 text

Контроллеры Проблемы: ● большие файлы; ● фильтры; ● структура файлов сама по себе.

Slide 3

Slide 3 text

Иерархия контроллеров /api/companies/2/people

Slide 4

Slide 4 text

Иерархия контроллеров

Slide 5

Slide 5 text

Иерархия контроллеров

Slide 6

Slide 6 text

Иерархия контроллеров

Slide 7

Slide 7 text

Иерархия контроллеров Профиты: ● небольшие файлы ● _намного_ меньше фильтров и условных фильтров ● по структуре файлов понятно как устроен проект ● удобная навигация ● http://habrahabr.ru/post/136461/

Slide 8

Slide 8 text

API ● app/controllers/api/v1 ● respond_with (respond_to :json) ● jbuilder

Slide 9

Slide 9 text

Ссылки в js? gem: js-routes Routes.user_path(3);

Slide 10

Slide 10 text

Сложная фильтрация с сортировками? gem: ransack User.ransack(params[:q])

Slide 11

Slide 11 text

Иерархия моделей ● Company::Order вместо CompanyOrder; ● решает конфликты имен; ● Удобнее: company.orders вместо company. company_orders ● зависимости видно по структуре файлов ● чем больше моделей, тем удобнее

Slide 12

Slide 12 text

Модели fat model, wtf?

Slide 13

Slide 13 text

Repository Модуль инкапсулирующий логику запросов к базе. Repository - позволяет работать с коллекцией объектов так как будто она находится в памяти Место: app/repositories Подключение: include CompanyRepository

Slide 14

Slide 14 text

Repository

Slide 15

Slide 15 text

Observers ● app/observers ● application logic (например нотификации) ● именование в соответствии с задачей

Slide 16

Slide 16 text

Observers

Slide 17

Slide 17 text

Presenters Объект инкапсулирующий логику представления ● не имеет отношения к декораторам ● ооп альтернатива хелперам ● draper

Slide 18

Slide 18 text

State Machine ● не используйте флаги ● всегда используйте state machine ● куча функциональности бесплатно ● единый подход сквозь весь проект

Slide 19

Slide 19 text

Forms Проблемы: ● зависимая валидация ● attr accessible ● фильтрация

Slide 20

Slide 20 text

Forms Плохие решения: ● говорим модели где ее используем ● strong_params

Slide 21

Slide 21 text

Forms Решение: компонент forms ● формы решают все обозначенные проблемы, но вносят новый слой ● Давным-давно присутствует во всех популярных фреймворках (php, python) ● Есть несколько реализаций форм для rails ● http://habrahabr.ru/post/140684/ ● примеры: http://d.pr/vgVX

Slide 22

Slide 22 text

custom inputs (simple form) f.input :file, as: preview

Slide 23

Slide 23 text

model gems ● ancestry, materialized paths ● money, embedded/value object ● cocoon, nested forms ● carrierwave instead of paperclip

Slide 24

Slide 24 text

assets ● js gems ● vendorer

Slide 25

Slide 25 text

зло before_validate

Slide 26

Slide 26 text

rake Как тестировать?

Slide 27

Slide 27 text

rake никак =), rake всего лишь cli к вашим методам

Slide 28

Slide 28 text

custom urls Ссылки, которые строятся без url helpers и часто являются динамическими.

Slide 29

Slide 29 text

custom urls

Slide 30

Slide 30 text

Вопросы? twitter: @mokevnin