Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Архитектурные практики в rails
Search
Mokevnin Kirill
June 15, 2013
Programming
650
16
Share
Архитектурные практики в rails
Mokevnin Kirill
June 15, 2013
More Decks by Mokevnin Kirill
See All by Mokevnin Kirill
Формирование инженерной культуры
mokevnin
0
58
ментальное программирование
mokevnin
2
160
Other Decks in Programming
See All in Programming
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3k
CSC307 Lecture 17
javiergs
PRO
0
290
AI時代のUIはどこへ行く?その2!
yusukebe
15
4.8k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
2.3k
TypeScriptだけでAIエージェントを作る フロント・エージェント・インフラのフルスタック実践
har1101
6
1.2k
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
18
7.6k
iOS26時代の新規アプリ開発
yuukiw00w
0
220
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
180
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
400
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
0
230
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
680
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
200
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
エンジニアに許された特別な時間の終わり
watany
107
240k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Color Theory Basics | Prateek | Gurzu
gurzu
0
320
For a Future-Friendly Web
brad_frost
183
10k
Producing Creativity
orderedlist
PRO
348
40k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
320
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
A Soul's Torment
seathinner
6
2.9k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
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