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
Deep Refactoring
October 26, 2017
Education
0
320
Без ОРМ
https://youtu.be/mb6-NHMzSkY
Deep Refactoring
October 26, 2017
Tweet
Share
More Decks by Deep Refactoring
See All by Deep Refactoring
Поворот на 90°
deeprefactoring
0
100
Card Payments 101
deeprefactoring
0
81
Звонки на стероидах
deeprefactoring
0
75
Make Time
deeprefactoring
0
62
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
96
Уменьшаем количество рефлексии в коде
deeprefactoring
1
47
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
290
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
110
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
100
Other Decks in Education
See All in Education
10分で日本史(試案)
hidekatsu_izuno
0
620
Ch8_-_Partie_2.pdf
bernhardsvt
0
120
2024年度春学期 統計学 第4回 データを「分布」で見る (2024. 5. 2)
akiraasano
PRO
0
140
プロダクト・エンジニア・QAE 3軸でのナレッジシェアのススメ
hinac0
1
520
〜AWS初心者向け〜 ベストプラクティスから学ぶ 「AWSセキュリティの高め方」
koheiyoshikawa
0
670
Ch9_-_Partie_1.pdf
bernhardsvt
0
100
Dashboards - Lecture 11 - Information Visualisation (4019538FNR)
signer
PRO
1
1.5k
OpenStreetMap概要説明 / Introducing OpenStreetMap
barsaka2
0
260
SDGsをアシスト! 現地調査データをアーカイブする技術2024|麻布大学デジタルマッピングワークショップ
fullfull
1
230
week4@tcue2024
nonxxxizm
0
520
week12@tcue2024
nonxxxizm
0
530
Droid Knights 2024 Accessibility in Android
nanamare
0
290
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
26
1.6k
Navigating Team Friction
lara
181
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
21
2.9k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Building Adaptive Systems
keathley
34
2k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
The Pragmatic Product Professional
lauravandoore
29
6.1k
Making Projects Easy
brettharned
111
5.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
24
1.8k
The Art of Programming - Codeland 2020
erikaheidi
48
13k
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.6k
Infographics Made Easy
chrislema
238
18k
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
Конец — Вопросы?