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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Mokevnin Kirill
June 15, 2013
Programming
16
640
Архитектурные практики в rails
Mokevnin Kirill
June 15, 2013
Tweet
Share
More Decks by Mokevnin Kirill
See All by Mokevnin Kirill
Формирование инженерной культуры
mokevnin
0
53
ментальное программирование
mokevnin
2
150
Other Decks in Programming
See All in Programming
Geminiの機能を調べ尽くしてみた
naruyoshimi
0
200
CSC307 Lecture 15
javiergs
PRO
0
220
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
160
15年目のiOSアプリを1から作り直す技術
teakun
1
600
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
120
CSC307 Lecture 13
javiergs
PRO
0
310
Rubyと楽しいをつくる / Creating joy with Ruby
chobishiba
0
210
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
170
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
7.6k
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
220
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
220
Premier Disciplin for Micro Frontends Multi Version/ Framework Scenarios @OOP 2026, Munic
manfredsteyer
PRO
0
210
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
130
The Spectacular Lies of Maps
axbom
PRO
1
580
Joys of Absence: A Defence of Solitary Play
codingconduct
1
300
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
140
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Believing is Seeing
oripsolob
1
72
Everyday Curiosity
cassininazir
0
150
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Ethics towards AI in product and experience design
skipperchong
2
210
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
280
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