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
16
600
Архитектурные практики в rails
Mokevnin Kirill
June 15, 2013
Tweet
Share
More Decks by Mokevnin Kirill
See All by Mokevnin Kirill
Формирование инженерной культуры
mokevnin
0
39
ментальное программирование
mokevnin
2
130
Other Decks in Programming
See All in Programming
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1k
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
170
あれやってみてー駆動から成長を加速させる / areyattemite-driven
nashiusagi
1
200
たのしいparse.y
ydah
3
120
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
920
命名をリントする
chiroruxx
1
390
CSC305 Lecture 25
javiergs
PRO
0
130
ドメインイベント増えすぎ問題
h0r15h0
1
170
testcontainers のススメ
sgash708
1
120
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
第5回日本眼科AI学会総会_AIコンテスト_3位解法
neilsaw
0
170
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
Building Your Own Lightsaber
phodgson
103
6.1k
Making the Leap to Tech Lead
cromwellryan
133
9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Code Reviewing Like a Champion
maltzj
520
39k
How GitHub (no longer) Works
holman
311
140k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
We Have a Design System, Now What?
morganepeng
51
7.3k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
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