Базовые классы

В основе любой концепции лежат базовые принципы. FunctionTools не является исключением. Так как библиотека следует ООП парадигме, то все абстрации будут классами со своими свойствами и действиями в виде методов.

Для упрощения восприятия материала рекомендуется обращаться к подробной диаграмме классов, представленной на Рисунке 1.

Рисунок 1

Рисунок 1

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

Таким образом появляется первый базовый класс web_bb.core.base.function_tools.general.RunnableObject - запускаемый объект. Данный класс является абстрактным и примешивает web_bb.core.base.function_tools.mixins.ValidatorMixin, который добавляет методы создания валидатора и запуска валидации запускаемого объекта. Также у запускаемого объекта появляется валидатор, спрятанный в приватное свойство и результат, также спрятанный в приватном свойстве. Класс имеет абстрактный метод run, который является точкой запуска исполняемого объекта и обязан быть переопределен у инстранцируемых наследников.

У запускаемых объектов может появиться необходимость исполнения отложенных действий, к примеру, сохранение объектов и выполнение каких либо действий в виде функций определенных в коде как функций-замыканий. Для удовлетворения возникших требований реализован абстрактный класс web_bb.core.base.function_tools.general.LazySavingRunnableObject наследуемый от web_bb.core.base.function_tools.general.RunnableObject. У класса появляется очередь объектов на сохранение и методы добавления объектов в очередь и запуск сохранения. Это пригодится, когда нужно организовать отложенное сохранение в функциях и пусковиках.

Как уже было выявлено эмпирическим путем, большие транзакции вредят СУБД, поэтому осуществлялось сокращение размера транзакций. Таким образом возникает необходимость отложенного сохранения объектов в рамках пишущей транзакции. Данная транзакция будет открывать только в тот момент, когда будет необходимо сохранить результаты работы функции в БД. Для работы с объектами моделей и действиями в виде функций, произведено расширение класса web_bb.core.base.function_tools.general.LazySavingRunnableObject и получен класс web_bb.core.base.function_tools.general.LazySavingActionModelRunnableObject.