$30 off During Our Annual Pro Sale. View Details »

Без ОРМ

Без ОРМ

Deep Refactoring

October 26, 2017
Tweet

More Decks by Deep Refactoring

Other Decks in Education

Transcript

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

    View Slide

  2. Википедия
    is a technique for converting data
    between incompatible type systems
    using object-oriented programming languages.

    View Slide

  3. ORM, например

    View Slide

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

    View Slide

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

    View Slide

  6. SQL
    — создан до ООП
    — декларативный
    — не-Тьюринг полный
    — решает задачи

    View Slide

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

    View Slide

  8. Примерная сложность
    SEL/INS/UPD/DEL +
    (на этом пора заканчивать)
    INNER/LEFT JOIN ++
    WITH RECURSIVE ++++
    JSON(b) ++++++++
    GIS ++++++++++++++
    FULLTEXT SEARCH ++++++++++++++++++++++++++++
    ...

    View Slide

  9. Проблемы
    — ORM системы сложны
    — внутренние API не документированы
    — не спасают от raw SQL

    View Slide

  10. Боязнь raw SQL
    — доменный язык (как HTML, CSS)
    — ООП-код растет
    — неэффективная работа с БД

    View Slide

  11. View Slide

  12. View Slide

  13. Эти ваши объекты

    View Slide

  14. К чему приводит ORM
    — Боязнь (незнание) SQL
    — Хрупкость базы
    — Лишний ОО-код
    — ORM-specific bugs

    View Slide

  15. К чему приводит ORM
    — Зависимость
    — Нечитаемые запросы
    — Трудно понять, что на выходе

    View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. А если будет тормозить?
    — Сперва добейся!
    — Конфигурация
    — Железо
    — Меньше кода

    View Slide

  21. Вам не нужны объекты
    — опасные property
    — нужны удобные структуры
    — и функции для работы с ними
    — Clojure, Go, Rust

    View Slide

  22. Что предлагаешь?
    — Построители запросов
    — Запросы из структур данных
    — SQL-шаблоны
    — Генерация функций

    View Slide

  23. Построители запросов

    View Slide

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

    View Slide

  25. SQL templates

    View Slide

  26. Наш проект
    — PostgreSQL, JDBC/Clojure
    — 70 таблиц
    — до 15 join-ов в запросах
    — GIS, JSONb
    — рекурсивные запросы

    View Slide

  27. View Slide

  28. SQL templates

    View Slide

  29. HugSQL, YeSQL
    — Один *.sql файл
    — Clojure, JS, Python, PHP, Perl, Go, C#,
    Erlang, Ruby

    View Slide

  30. Конец
    — Вопросы?

    View Slide