Tools for creating functions
Project description
function-tools - это библиотека вспомогательных классов для реализации Функций системы.
Договоримся
Необходимо различать функции - объект Python и бизнес-функцию. В тех местах, где речь будет вестить про Python-функции - они будут написаны с маленькой буквы - функции, про бизнес-функции с большой буквы - Функции. Если абстрагироваться, то система - хранилище данных и функционал, который каким-то образом изменяет данные, при этом достигая ожидаего результата описанного в бизнес требованиях. Таким образом, Функции - это ядро системы и необходимо уделять пристальное внимание тому, как Функции реализованы в системе.
В большинстве случаев Функции имеют следующие признаки:
- Реализованы в виде функций длинной не влазящик ни в один экран монитора;
- Имеют запутанный код с множеством условных конструкций (умеренное количество допустимо);
- Взаимодействие с базой данных выстроено таким образом, как будто вся база данных хранится в оперативной памяти и нет необходимости заботиться о количестве запросов и их оптимальности;
- Наименование функций и названий переменных сокращено настолько, что для понимания кода иногда не хватает простого прочтения и возникает необходимость дебага. Часто это дополнятся размером функций, когда в середине не помнишь, что было в начале.
- Высокая когнитивная нагрузка связанная со сложностью реализации и правилами, для которых нет описания, но они имеют фундаментальное значение в работе Функций.
- Низкий уровень самодокументируемости кода из-за плохой его декомпозиции;
- Перегруженность функций действиями, которые являются вспомогательными и никак не отражают реализованные бизнес требования.
- Отсутствие валидации входных данных и данных при выполнении функции, что позволяет потенциально испортить данные;
- Кеширование данных для работы функции часто замешано код функции;
- Большая вариативность реализаций Функций, что не позволят однозначно найти причину ошибки при ее возникновении в виде Инцидента или Бага (если конечно не сам сегодня эту ошибку совершил).
Для решения указанных проблем была разработана библиотека с проработанной архитектурой, которая находится в разработке, но уже решающая массу проблем.
Упрощенная диаграмма классов представлена на Рисунке 1.
Основные компоненты:
Cache
Кеш объектов некоторой указанной сущности. Служит для однократной выборки данных и дальнейшего их использования в рамках функции (Function).
StorageCache
Хранилище кешей. Состоит из кешей и используется для более удобного хранения и доступа к ним.
Helper
Помощник запускаемого объекта. Содержит вспомогательные функции, кеш.
Validator
Валидатор данных. Имеется у Пускателя и Функции.
Function
Функция, приближенная к бизнес-функции. Имеет помощника и выполняет действия согласно безнес требований.
Runner
Пускатель. Умеет запускать как одинчные функции, так и цепочные функции представленные в виде пускателей.
RunnerManager
Менеджер пускателя. Отвечает за создание функций и пускателей и дальнейший их запуск.
Error
Ошибка, возникающая в процессе работы.
Result
Результат исполнения запускаемого объекта.
ResultPresenter
Презентер результата исполнения запускаемого объекта. Данные компоненты позволяют распределить обязанности и, таким образом существенно снизить когнитивную нагрузку при анализе кода. При понимании работы механизма, можно без особых усилий локализовывать возникающие ошибки и иправлять их. Код становится самодокументируемым и возникает необходимость описания только основополагающих концепций и подходов к реализации требуемого функционала.
Алгоритм работы Функции выглядит следующим образом:
- Создается пускатель;
- Создаются функции и пускатели, которые добавляются в очередь на исполнение пускателю;
- Функции и пускатели создают помощников, которые в свою очередь создают хранилища кешей;
- Перед запуском выполняемых объектов производится валидация на уровне пускателя;
- Производится запуск функций;
- После завершения работы выполняемых объектов и, соответственно, пускателя, производится вывод результата работы пользователю в необходимом виде.
Подробная актуальная диаграммка классов представлена на Рисунке 2.
С подробной документацией можно ознакомиться на function-tools.readthedocs.io
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file function_tools-0.10.7.tar.gz
.
File metadata
- Download URL: function_tools-0.10.7.tar.gz
- Upload date:
- Size: 53.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
0f2e196c50c3cb635ff921920ae372909f7a9fa627c0001a63b5a9e6103ef853
|
|
MD5 |
0b3ffc7fc9190c8541dba3800fd60e14
|
|
BLAKE2b-256 |
d6c81b6a1c5607db1e638f44edabfc8db873f641f9a4ea2b2f33bf0cfd97b3aa
|
File details
Details for the file function_tools-0.10.7-py3-none-any.whl
.
File metadata
- Download URL: function_tools-0.10.7-py3-none-any.whl
- Upload date:
- Size: 65.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
fb8777c375aa685324a4bbba395a487dc71296798802b7a3216059bb81196afc
|
|
MD5 |
5ac599ff4ee28b7baa5c6f7fd20ca1cd
|
|
BLAKE2b-256 |
42bac6de49a9342c2511bd5ffcb5d140e2595352dc203fd7c531d292bd94ca6f
|