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
380
Без ОРМ
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
110
Card Payments 101
deeprefactoring
0
91
Звонки на стероидах
deeprefactoring
0
83
Make Time
deeprefactoring
0
68
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
130
Уменьшаем количество рефлексии в коде
deeprefactoring
1
53
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
350
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
130
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
130
Other Decks in Education
See All in Education
世界の将来人口を誰でも語れるようになる
jo76shin
0
100
Sanapilvet opetuksessa
matleenalaakso
0
31k
CSS3 and Responsive Web Design - Lecture 5 - Web Technologies (1019888BNR)
signer
PRO
1
2.6k
Ch2_-_Partie_1.pdf
bernhardsvt
0
130
BrightonSEO, San Diego, CA 2024
mchowning
0
120
Initiatives on Bridging the Gender Gap in the Technology Sector
codeforeveryone
0
100
1113
cbtlibrary
0
290
2024年度秋学期 統計学 第7回 データの関係を知る(2)ー 回帰と決定係数 (2024. 11. 6)
akiraasano
PRO
0
140
1216
cbtlibrary
0
270
TP5_-_UV.pdf
bernhardsvt
0
130
2024年度秋学期 統計学 第12回 分布の平均を推測する - 区間推定 (2024. 12. 11)
akiraasano
PRO
0
110
ビジネススキル研修紹介(株式会社27th)
27th
PRO
1
440
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Building Your Own Lightsaber
phodgson
104
6.2k
Facilitating Awesome Meetings
lara
51
6.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Code Reviewing Like a Champion
maltzj
521
39k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
6
220
The Cost Of JavaScript in 2023
addyosmani
47
7.3k
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
Конец — Вопросы?