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
430
Без ОРМ
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
130
Card Payments 101
deeprefactoring
0
120
Звонки на стероидах
deeprefactoring
0
100
Make Time
deeprefactoring
0
79
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
170
Уменьшаем количество рефлексии в коде
deeprefactoring
1
74
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
410
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
160
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
160
Other Decks in Education
See All in Education
ARアプリを活用した防災まち歩きデータ作成ハンズオン
nro2daisuke
0
180
2025年度春学期 統計学 第14回 分布についての仮説を検証する ー 仮説検定(1) (2025. 7. 10)
akiraasano
PRO
0
140
[FUN Open Campus 2025] 何でもセンシングしていいですか?
pman0214
0
240
アントレプレナーシップ教育 ~ 自分で自分の幸せを決めるために ~
yoshizaki
0
170
Présentation_1ère_Spé_2025.pdf
bernhardsvt
0
250
Alumnote inc. Company Deck
yukinumata
0
2.1k
Pythonパッケージ管理 [uv] 完全入門
mickey_kubo
23
24k
技術勉強会 〜 OAuth & OIDC 入門編 / 20250528 OAuth and OIDC
oidfj
5
1.8k
CHARMS-HP-Banner
weltraumreisende
0
810
学びは趣味の延長線
ohmori_yusuke
0
110
探査機自作ゼミ2025スライド
sksat
3
780
20250611_なんでもCopilot1年続いたぞ~
ponponmikankan
0
170
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
We Have a Design System, Now What?
morganepeng
53
7.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
BBQ
matthewcrist
89
9.8k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Site-Speed That Sticks
csswizardry
10
820
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
Конец — Вопросы?