Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Без ОРМ

Без ОРМ

80eadbf0a221aaa4b764854df32fb781?s=128

Deep Refactoring

October 26, 2017
Tweet

More Decks by Deep Refactoring

Other Decks in Education

Transcript

  1. Без ORM Иван Гришаев, 2017

  2. Википедия is a technique for converting data between incompatible type

    systems using object-oriented programming languages.
  3. ORM, например

  4. Что дает — абстракция над БД — упрощает процесс разработки

    — объектность™
  5. В реальности — абстракции (чаще всего) зло — база меняется

    редко (и болезненно) — коллекции > объекты
  6. SQL — создан до ООП — декларативный — не-Тьюринг полный

    — решает задачи
  7. Задача о переводе SQL в объекты... — неразрешима в принципе!

    — сравнима с трансляцией языков
  8. Примерная сложность SEL/INS/UPD/DEL + (на этом пора заканчивать) INNER/LEFT JOIN

    ++ WITH RECURSIVE ++++ JSON(b) ++++++++ GIS ++++++++++++++ FULLTEXT SEARCH ++++++++++++++++++++++++++++ ...
  9. Проблемы — ORM системы сложны — внутренние API не документированы

    — не спасают от raw SQL
  10. Боязнь raw SQL — доменный язык (как HTML, CSS) —

    ООП-код растет — неэффективная работа с БД
  11. None
  12. None
  13. Эти ваши объекты

  14. К чему приводит ORM — Боязнь (незнание) SQL — Хрупкость

    базы — Лишний ОО-код — ORM-specific bugs
  15. К чему приводит ORM — Зависимость — Нечитаемые запросы —

    Трудно понять, что на выходе
  16. None
  17. None
  18. None
  19. None
  20. А если будет тормозить? — Сперва добейся! — Конфигурация —

    Железо — Меньше кода
  21. Вам не нужны объекты — опасные property — нужны удобные

    структуры — и функции для работы с ними — Clojure, Go, Rust
  22. Что предлагаешь? — Построители запросов — Запросы из структур данных

    — SQL-шаблоны — Генерация функций
  23. Построители запросов

  24. Запросы из структур данных

  25. SQL templates

  26. Наш проект — PostgreSQL, JDBC/Clojure — 70 таблиц — до

    15 join-ов в запросах — GIS, JSONb — рекурсивные запросы
  27. None
  28. SQL templates

  29. HugSQL, YeSQL — Один *.sql файл — Clojure, JS, Python,

    PHP, Perl, Go, C#, Erlang, Ruby
  30. Конец — Вопросы?