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
390
Без ОРМ
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
92
Звонки на стероидах
deeprefactoring
0
85
Make Time
deeprefactoring
0
68
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
140
Уменьшаем количество рефлексии в коде
deeprefactoring
1
55
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
360
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
140
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
130
Other Decks in Education
See All in Education
いにしえの国産データベース~桐~って知っていますか?
masakiokuda
2
120
自分にあった読書方法を探索するワークショップ / Reading Catalog Workshop
aki_moon
0
330
Ch4_-_Cours_1.pdf
bernhardsvt
0
180
zupanijska natjecanja
petarradanovic2
0
190
AWS Well-Architected Labを活用してつよつよAWSエンジニアになろう!!! #jawsug_tokyo
masakiokuda
0
310
OnShapeの紹介-概要編
shiba_8ro
0
110
生成AIと歩むこれからの大学
gmoriki
0
1.1k
CV_1_Introduction
hachama
0
170
自己紹介 / who-am-i
yasulab
PRO
2
4.7k
Архитектура военных и силовых ведомств как основа дальневосточного культурного ландшафта
pnuslide
0
110
Adobe Express
matleenalaakso
1
7.8k
Mathematics used in cryptography around us
herumi
2
780
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Visualization
eitanlees
146
15k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
13
1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
390
Into the Great Unknown - MozCon
thekraken
35
1.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
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
Конец — Вопросы?