doc_02_abstract - grossho/billow GitHub Wiki
Концепция ORM.
Введение.
Наименование этого модуля (billow) взято по нескольким соображениям. В основном это касается переводного смысла — «волна», а другой — фонетическое произношение близко к произношению «be low» — «быть низким». Здесь предлагается интерпретировать в отношении уровня исполнения. То есть модуль должен быть низкоуровневой платформой для построения кода.
Предпосылкой для создания этого проекта явилась тенденция усложнения других ORM систем. В их развитии прослеживается стремиться покрыть функционал как можно большего количества поставщиков SQL СУБД, одновременно вместе с этим уделяя много внимания строгой типизации, для безопасной подстановки в тело SQL надлежащим образом экранированных данных. К каждой СУБД обычно поставляется одна поведенческая реализация.
В многих смыслах цель данного проекта мало отличается от подобных. Основное отличие кратко можно обозначить, как «плагин-ориентированная ORM». Другими словами, модуль призван обеспечить схождение большей части возможности реляционных и NoSQL в единый набор Python операций. Плагин, обеспечивающий преобразование аргументов в набор команд и данных (что в последующем тексте будем выражать под термином «диалект СУБД»), обеспечивает также и путь преобразования, что позволяет для одной реализации СУБД задействовать несколько разновидностей рабочих модулей.
Плагины, кроме одновременной поддержки разных версий СУБД с необходимым workaround, меж собой могут также отличаться разной поддержкой транзакций, лучшей интроспективностью, специализированными модулями для исполнения на тестовом наборе данных.
Концепция плагин-ориентированной архитектуры ORM влечет за собой необходимость обеспечить охват в базовый набор как можно большего количества операций и стратегий работы с данными. При этом набор операндов, типов и функций должен оставаться ограничен, и расширяться исходя из разумного минимализма — когда иной способ приводит к построению запутанной логики, при этом не имея возможности быть упрощенным.
Построенная программа на основе примитивов этого модуля будет обладать несколькими свойствами:
- переносимость кода между разными поставщиками СУБД;
- безопасная работа в много поточном окружении даже в случае частично подготовленных для этого backend-модулей;
- возможность быстрого переключения части расчетов СУБД на плечи ORM обработчика;
- инструментарий по преобразованию таблиц к иерархическому представлению баз данных (графы также представимы в виде деревьев, с тем чтобы количество итераций по обходу в глубину всегда было конечным числом);
- поддержка транзакций с выносом реализации на более высокий уровень абстракции;
- возможность позднего связывания исполняемых данных с уровнем подключения к СУБД;
- дополнительные функции и объекты, расширяющие изначальный набор.