doc_02_abstract - grossho/billow GitHub Wiki

Концепция ORM.

Введение.

Наименование этого модуля (billow) взято по нескольким соображениям. В основном это касается переводного смысла — «волна», а другой — фонетическое произношение близко к произношению «be low» — «быть низким». Здесь предлагается интерпретировать в отношении уровня исполнения. То есть модуль должен быть низкоуровневой платформой для построения кода.

Предпосылкой для создания этого проекта явилась тенденция усложнения других ORM систем. В их развитии прослеживается стремиться покрыть функционал как можно большего количества поставщиков SQL СУБД, одновременно вместе с этим уделяя много внимания строгой типизации, для безопасной подстановки в тело SQL надлежащим образом экранированных данных. К каждой СУБД обычно поставляется одна поведенческая реализация.

В многих смыслах цель данного проекта мало отличается от подобных. Основное отличие кратко можно обозначить, как «плагин-ориентированная ORM». Другими словами, модуль призван обеспечить схождение большей части возможности реляционных и NoSQL в единый набор Python операций. Плагин, обеспечивающий преобразование аргументов в набор команд и данных (что в последующем тексте будем выражать под термином «диалект СУБД»), обеспечивает также и путь преобразования, что позволяет для одной реализации СУБД задействовать несколько разновидностей рабочих модулей.

Плагины, кроме одновременной поддержки разных версий СУБД с необходимым workaround, меж собой могут также отличаться разной поддержкой транзакций, лучшей интроспективностью, специализированными модулями для исполнения на тестовом наборе данных.

Концепция плагин-ориентированной архитектуры ORM влечет за собой необходимость обеспечить охват в базовый набор как можно большего количества операций и стратегий работы с данными. При этом набор операндов, типов и функций должен оставаться ограничен, и расширяться исходя из разумного минимализма — когда иной способ приводит к построению запутанной логики, при этом не имея возможности быть упрощенным.

Построенная программа на основе примитивов этого модуля будет обладать несколькими свойствами:

  • переносимость кода между разными поставщиками СУБД;
  • безопасная работа в много поточном окружении даже в случае частично подготовленных для этого backend-модулей;
  • возможность быстрого переключения части расчетов СУБД на плечи ORM обработчика;
  • инструментарий по преобразованию таблиц к иерархическому представлению баз данных (графы также представимы в виде деревьев, с тем чтобы количество итераций по обходу в глубину всегда было конечным числом);
  • поддержка транзакций с выносом реализации на более высокий уровень абстракции;
  • возможность позднего связывания исполняемых данных с уровнем подключения к СУБД;
  • дополнительные функции и объекты, расширяющие изначальный набор.