×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Без ORM Иван Гришаев, 2017
Slide 2
Slide 2 text
Википедия is a technique for converting data between incompatible type systems using object-oriented programming languages.
Slide 3
Slide 3 text
ORM, например
Slide 4
Slide 4 text
Что дает — абстракция над БД — упрощает процесс разработки — объектность™
Slide 5
Slide 5 text
В реальности — абстракции (чаще всего) зло — база меняется редко (и болезненно) — коллекции > объекты
Slide 6
Slide 6 text
SQL — создан до ООП — декларативный — не-Тьюринг полный — решает задачи
Slide 7
Slide 7 text
Задача о переводе SQL в объекты... — неразрешима в принципе! — сравнима с трансляцией языков
Slide 8
Slide 8 text
Примерная сложность SEL/INS/UPD/DEL + (на этом пора заканчивать) INNER/LEFT JOIN ++ WITH RECURSIVE ++++ JSON(b) ++++++++ GIS ++++++++++++++ FULLTEXT SEARCH ++++++++++++++++++++++++++++ ...
Slide 9
Slide 9 text
Проблемы — ORM системы сложны — внутренние API не документированы — не спасают от raw SQL
Slide 10
Slide 10 text
Боязнь raw SQL — доменный язык (как HTML, CSS) — ООП-код растет — неэффективная работа с БД
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Эти ваши объекты
Slide 14
Slide 14 text
К чему приводит ORM — Боязнь (незнание) SQL — Хрупкость базы — Лишний ОО-код — ORM-specific bugs
Slide 15
Slide 15 text
К чему приводит ORM — Зависимость — Нечитаемые запросы — Трудно понять, что на выходе
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
А если будет тормозить? — Сперва добейся! — Конфигурация — Железо — Меньше кода
Slide 21
Slide 21 text
Вам не нужны объекты — опасные property — нужны удобные структуры — и функции для работы с ними — Clojure, Go, Rust
Slide 22
Slide 22 text
Что предлагаешь? — Построители запросов — Запросы из структур данных — SQL-шаблоны — Генерация функций
Slide 23
Slide 23 text
Построители запросов
Slide 24
Slide 24 text
Запросы из структур данных
Slide 25
Slide 25 text
SQL templates
Slide 26
Slide 26 text
Наш проект — PostgreSQL, JDBC/Clojure — 70 таблиц — до 15 join-ов в запросах — GIS, JSONb — рекурсивные запросы
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
SQL templates
Slide 29
Slide 29 text
HugSQL, YeSQL — Один *.sql файл — Clojure, JS, Python, PHP, Perl, Go, C#, Erlang, Ruby
Slide 30
Slide 30 text
Конец — Вопросы?