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
440
Без ОРМ
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
110
Make Time
deeprefactoring
0
79
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
170
Уменьшаем количество рефлексии в коде
deeprefactoring
1
78
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
410
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
170
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
170
Other Decks in Education
See All in Education
the difficulty into words
ukky86
0
180
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
220
Editor First: Customizing TYPO3 for a Cleaner Workflow
ulli
0
110
ロータリー国際大会について~国際大会に参加しよう~:古賀 真由美 会員(2720 Japan O.K. ロータリーEクラブ・(有)誠邦産業 取締役)
2720japanoke
1
650
いわゆる「ふつう」のキャリアを歩んだ人の割合(若者向け)
hysmrk
0
210
子どもが自立した学習者となるデジタルの活用について
naokikato
PRO
0
130
生態系ウォーズ - ルールブック
yui_itoshima
1
320
(2025) L'origami, mieux que la règle et le compas
mansuy
0
160
H5P-työkalut
matleenalaakso
4
40k
みんなのコードD&I推進レポート2025 テクノロジー分野のジェンダーギャップとその取り組みについて
codeforeveryone
0
340
Library Prefects 2025-2026
cbtlibrary
0
120
質のよいアウトプットをできるようになるために~「読む・聞く、まとめる、言葉にする」を読んで~
amarelo_n24
0
290
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
950
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Cult of Friendly URLs
andyhume
79
6.7k
Raft: Consensus for Rubyists
vanstee
140
7.2k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Optimizing for Happiness
mojombo
379
70k
KATA
mclloyd
PRO
32
15k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.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
Конец — Вопросы?