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
Без ОРМ
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Deep Refactoring
October 26, 2017
Education
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Без ОРМ
https://youtu.be/mb6-NHMzSkY
Deep Refactoring
October 26, 2017
More Decks by Deep Refactoring
See All by Deep Refactoring
Поворот на 90°
deeprefactoring
0
140
Card Payments 101
deeprefactoring
0
140
Звонки на стероидах
deeprefactoring
0
140
Make Time
deeprefactoring
0
95
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
190
Уменьшаем количество рефлексии в коде
deeprefactoring
1
100
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
460
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
210
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
210
Other Decks in Education
See All in Education
[2026前期火5] 論理学(京都大学文学部 前期 第4回)「 ならば(→)の導入と証明ネット」
yatabe
0
540
2026年度春学期 統計学 第8回(オンデマンド配信回) 演習(1)・問題に対する答案の書き方 (2026. 5. 21)
akiraasano
PRO
0
180
第2部-高校生とAI活用/high-school2026-2
okana2ki
0
130
[2026前期火5] 論理学(京都大学文学部 前期 第14回)「計算は、証明ではない——ハルシネーションを三層ハーモニーで診る」
yatabe
0
210
0526
cbtlibrary
0
240
Soluciones al examen de Geografía 2026. JUNIO (Convocatoria Ordinaria)
juanmartin2026
1
9k
NDIAS Automotive / IoT CTF 2026 Recap - Keyfob & OSINT
himitu23
0
310
AI-Based Speaking Assessment of a Short-Term Study Abroad Program
uranoken
0
440
[2026前期火5] 論理学(京都大学文学部 前期 第9回)「正規化の停止性——ヒドラゲームによる証明」
yatabe
0
230
遊ぶかね欲しさの犯行(ルビ:労働)です
shirayanagiryuji
0
240
2026年度春学期 統計学 第15回 分布についての仮説を検証する ― 仮説検定(2) (2026. 7. 9)
akiraasano
PRO
0
110
Stardy 会社紹介資料
stardy
0
6k
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
390
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Facilitating Awesome Meetings
lara
57
7.1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Exploring anti-patterns in Rails
aemeredith
3
470
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Navigating Team Friction
lara
192
16k
Code Reviewing Like a Champion
maltzj
528
40k
Product Roadmaps are Hard
iamctodd
55
12k
Transcript
Без ORM Иван Гришаев, 2017
Википедия is a technique for converting data between incompatible type
systems using object-oriented programming languages.
ORM, например
Что дает — абстракция над БД — упрощает процесс разработки
— объектность™
В реальности — абстракции (чаще всего) зло — база меняется
редко (и болезненно) — коллекции > объекты
SQL — создан до ООП — декларативный — не-Тьюринг полный
— решает задачи
Задача о переводе SQL в объекты... — неразрешима в принципе!
— сравнима с трансляцией языков
Примерная сложность SEL/INS/UPD/DEL + (на этом пора заканчивать) INNER/LEFT JOIN
++ WITH RECURSIVE ++++ JSON(b) ++++++++ GIS ++++++++++++++ FULLTEXT SEARCH ++++++++++++++++++++++++++++ ...
Проблемы — ORM системы сложны — внутренние API не документированы
— не спасают от raw SQL
Боязнь raw SQL — доменный язык (как HTML, CSS) —
ООП-код растет — неэффективная работа с БД
None
None
Эти ваши объекты
К чему приводит ORM — Боязнь (незнание) SQL — Хрупкость
базы — Лишний ОО-код — ORM-specific bugs
К чему приводит ORM — Зависимость — Нечитаемые запросы —
Трудно понять, что на выходе
None
None
None
None
А если будет тормозить? — Сперва добейся! — Конфигурация —
Железо — Меньше кода
Вам не нужны объекты — опасные property — нужны удобные
структуры — и функции для работы с ними — Clojure, Go, Rust
Что предлагаешь? — Построители запросов — Запросы из структур данных
— SQL-шаблоны — Генерация функций
Построители запросов
Запросы из структур данных
SQL templates
Наш проект — PostgreSQL, JDBC/Clojure — 70 таблиц — до
15 join-ов в запросах — GIS, JSONb — рекурсивные запросы
None
SQL templates
HugSQL, YeSQL — Один *.sql файл — Clojure, JS, Python,
PHP, Perl, Go, C#, Erlang, Ruby
Конец — Вопросы?