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
290
Без ОРМ
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
76
Звонки на стероидах
deeprefactoring
0
68
Make Time
deeprefactoring
0
57
Learn-to-Rank или как научить бездушную машину хорошо искать
deeprefactoring
0
82
Уменьшаем количество рефлексии в коде
deeprefactoring
1
45
Прикладная кодогенерация для Java разработчика
deeprefactoring
0
260
Пишем игровой навык для Алисы Яндекс с помощью Excel
deeprefactoring
0
92
Подружиться с исключениями. Иван Гришаев, Exoscale
deeprefactoring
0
98
Other Decks in Education
See All in Education
人生の転機からチャンスを掴む「シュロスバーグの4Sモデル」/4s-models
yuko_yokouchi
3
780
子どもたち創造的活動機会の必要性に関する提言/creativehub
codeforeveryone
0
350
H5P-työkalut
matleenalaakso
3
33k
Data Processing and Visualisation Frameworks - Lecture 6 - Information Visualisation (4019538FNR)
signer
PRO
1
1.7k
Microsoft Office 365
matleenalaakso
0
1.5k
Поступление в ТОГУ 2024
pnuslide
0
42k
2024年度春学期 統計学 第2回 統計資料の収集と読み方(授業前配付用) (2024. 4. 18)
akiraasano
PRO
0
110
Data Representation - Lecture 3 - Information Visualisation (4019538FNR)
signer
PRO
1
1.7k
Multimodal Interaction - Lecture 3 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.1k
2024年度春学期 統計学 第1回 イントロダクションー統計的なものの見方・考え方について (2024. 4. 11)
akiraasano
PRO
1
110
20240319AJG
tosseto
0
320
Analysis and Validation - Lecture 4 - Information Visualisation (4019538FNR)
signer
PRO
0
1.4k
Featured
See All Featured
The Mythical Team-Month
searls
217
42k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Music & Morning Musume
bryan
41
5.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
What's in a price? How to price your products and services
michaelherold
238
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
7k
Web Components: a chance to create the future
zenorocha
306
41k
Product Roadmaps are Hard
iamctodd
45
9.8k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Teambox: Starting and Learning
jrom
128
8.4k
Designing for humans not robots
tammielis
247
25k
The Language of Interfaces
destraynor
151
23k
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
Конец — Вопросы?