$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Архитектурные практики в rails
Search
Mokevnin Kirill
June 15, 2013
Programming
16
630
Архитектурные практики в rails
Mokevnin Kirill
June 15, 2013
Tweet
Share
More Decks by Mokevnin Kirill
See All by Mokevnin Kirill
Формирование инженерной культуры
mokevnin
0
50
ментальное программирование
mokevnin
2
150
Other Decks in Programming
See All in Programming
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
170
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
110
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
7.1k
tparseでgo testの出力を見やすくする
utgwkk
2
210
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
開発に寄りそう自動テストの実現
goyoki
2
920
WebRTC と Rust と8K 60fps
tnoho
2
2k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Speed Design
sergeychernyshev
33
1.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Balancing Empowerment & Direction
lara
5
800
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
100
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Site-Speed That Sticks
csswizardry
13
1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Transcript
Архитектурные практики в rails Кирилл Мокевнин, undev.ru
Контроллеры Проблемы: • большие файлы; • фильтры; • структура файлов
сама по себе.
Иерархия контроллеров /api/companies/2/people
Иерархия контроллеров
Иерархия контроллеров
Иерархия контроллеров
Иерархия контроллеров Профиты: • небольшие файлы • _намного_ меньше фильтров
и условных фильтров • по структуре файлов понятно как устроен проект • удобная навигация • http://habrahabr.ru/post/136461/
API • app/controllers/api/v1 • respond_with (respond_to :json) • jbuilder
Ссылки в js? gem: js-routes Routes.user_path(3);
Сложная фильтрация с сортировками? gem: ransack User.ransack(params[:q])
Иерархия моделей • Company::Order вместо CompanyOrder; • решает конфликты имен;
• Удобнее: company.orders вместо company. company_orders • зависимости видно по структуре файлов • чем больше моделей, тем удобнее
Модели fat model, wtf?
Repository Модуль инкапсулирующий логику запросов к базе. Repository - позволяет
работать с коллекцией объектов так как будто она находится в памяти Место: app/repositories Подключение: include CompanyRepository
Repository
Observers • app/observers • application logic (например нотификации) • именование
в соответствии с задачей
Observers
Presenters Объект инкапсулирующий логику представления • не имеет отношения к
декораторам • ооп альтернатива хелперам • draper
State Machine • не используйте флаги • всегда используйте state
machine • куча функциональности бесплатно • единый подход сквозь весь проект
Forms Проблемы: • зависимая валидация • attr accessible • фильтрация
Forms Плохие решения: • говорим модели где ее используем •
strong_params
Forms Решение: компонент forms • формы решают все обозначенные проблемы,
но вносят новый слой • Давным-давно присутствует во всех популярных фреймворках (php, python) • Есть несколько реализаций форм для rails • http://habrahabr.ru/post/140684/ • примеры: http://d.pr/vgVX
custom inputs (simple form) f.input :file, as: preview
model gems • ancestry, materialized paths • money, embedded/value object
• cocoon, nested forms • carrierwave instead of paperclip
assets • js gems • vendorer
зло before_validate
rake Как тестировать?
rake никак =), rake всего лишь cli к вашим методам
custom urls Ссылки, которые строятся без url helpers и часто
являются динамическими.
custom urls
Вопросы? twitter: @mokevnin