Базовые классы¶
В основе любой концепции лежат базовые принципы. FunctionTools не является исключением. Так как библиотека следует ООП парадигме, то все абстрации будут классами со своими свойствами и действиями в виде методов.
Для упрощения восприятия материала рекомендуется обращаться к подробной диаграмме классов, представленной на Рисунке 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.