Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Архитектурные практики в rails
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Mokevnin Kirill
June 15, 2013
Programming
650
16
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Архитектурные практики в rails
Mokevnin Kirill
June 15, 2013
Transcript
30 slides
Архитектурные практики в 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
More Decks by Mokevnin Kirill
See All by Mokevnin Kirill
Формирование инженерной культуры
mokevnin
0
64
ментальное программирование
mokevnin
2
170
Other Decks in Programming
See All in Programming
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
140
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
980
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
310
仕様駆動開発入門 (何を作るかを先に決めて渡す) | 目指せ Kiro マスター 05
inariku
PRO
2
150
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.9k
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
330
止まらない比較を止める — 余帰納法で無限ストリームを比べる
tarao
0
140
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
Next.js: The final boss of Web Performance
guaca
0
400
どうしても Eloquent でリポジトリパターンをやりたいんだ #phpcon_niigata / phpcon-niigata-2026
shogogg
0
110
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
640
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
2
780
Ruling the World: When Life Gets Gamed
codingconduct
0
440
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
1
240
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
560
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
Accessibility Awareness
sabderemane
1
300
The Cost Of JavaScript in 2023
addyosmani
56
10k
The Language of Interfaces
destraynor
162
27k
The SEO Collaboration Effect
kristinabergwall1
1
620
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Odyssey Design
rkendrick25
PRO
3
940