Skip to main content

Tools for creating functions

Project description

function-tools - это библиотека вспомогательных классов для реализации Функций системы.

Договоримся

Необходимо различать функции - объект Python и бизнес-функцию. В тех местах, где речь будет вестить про Python-функции - они будут написаны с маленькой буквы - функции, про бизнес-функции с большой буквы - Функции. Если абстрагироваться, то система - хранилище данных и функционал, который каким-то образом изменяет данные, при этом достигая ожидаего результата описанного в бизнес требованиях. Таким образом, Функции - это ядро системы и необходимо уделять пристальное внимание тому, как Функции реализованы в системе.

В большинстве случаев Функции имеют следующие признаки:

  • Реализованы в виде функций длинной не влазящик ни в один экран монитора;
  • Имеют запутанный код с множеством условных конструкций (умеренное количество допустимо);
  • Взаимодействие с базой данных выстроено таким образом, как будто вся база данных хранится в оперативной памяти и нет необходимости заботиться о количестве запросов и их оптимальности;
  • Наименование функций и названий переменных сокращено настолько, что для понимания кода иногда не хватает простого прочтения и возникает необходимость дебага. Часто это дополнятся размером функций, когда в середине не помнишь, что было в начале.
  • Высокая когнитивная нагрузка связанная со сложностью реализации и правилами, для которых нет описания, но они имеют фундаментальное значение в работе Функций.
  • Низкий уровень самодокументируемости кода из-за плохой его декомпозиции;
  • Перегруженность функций действиями, которые являются вспомогательными и никак не отражают реализованные бизнес требования.
  • Отсутствие валидации входных данных и данных при выполнении функции, что позволяет потенциально испортить данные;
  • Кеширование данных для работы функции часто замешано код функции;
  • Большая вариативность реализаций Функций, что не позволят однозначно найти причину ошибки при ее возникновении в виде Инцидента или Бага (если конечно не сам сегодня эту ошибку совершил).

Для решения указанных проблем была разработана библиотека с проработанной архитектурой, которая находится в разработке, но уже решающая массу проблем.

Упрощенная диаграмма классов представлена на Рисунке 1.

Рисунок 1

Основные компоненты:

Cache

Кеш объектов некоторой указанной сущности. Служит для однократной выборки данных и дальнейшего их использования в рамках функции (Function).

StorageCache

Хранилище кешей. Состоит из кешей и используется для более удобного хранения и доступа к ним.

Helper

Помощник запускаемого объекта. Содержит вспомогательные функции, кеш.

Validator

Валидатор данных. Имеется у Пускателя и Функции.

Function

Функция, приближенная к бизнес-функции. Имеет помощника и выполняет действия согласно безнес требований.

Runner

Пускатель. Умеет запускать как одинчные функции, так и цепочные функции представленные в виде пускателей.

RunnerManager

Менеджер пускателя. Отвечает за создание функций и пускателей и дальнейший их запуск.

Error

Ошибка, возникающая в процессе работы.

Result

Результат исполнения запускаемого объекта.

ResultPresenter

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

Алгоритм работы Функции выглядит следующим образом:

  • Создается пускатель;
  • Создаются функции и пускатели, которые добавляются в очередь на исполнение пускателю;
  • Функции и пускатели создают помощников, которые в свою очередь создают хранилища кешей;
  • Перед запуском выполняемых объектов производится валидация на уровне пускателя;
  • Производится запуск функций;
  • После завершения работы выполняемых объектов и, соответственно, пускателя, производится вывод результата работы пользователю в необходимом виде.

Подробная актуальная диаграммка классов представлена на Рисунке 2.

Рисунок 2

С подробной документацией можно ознакомиться на function-tools.readthedocs.io

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

function_tools-0.11.0.tar.gz (53.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

function_tools-0.11.0-py3-none-any.whl (65.1 kB view details)

Uploaded Python 3

File details

Details for the file function_tools-0.11.0.tar.gz.

File metadata

  • Download URL: function_tools-0.11.0.tar.gz
  • Upload date:
  • Size: 53.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.7

File hashes

Hashes for function_tools-0.11.0.tar.gz
Algorithm Hash digest
SHA256 b2b079ae3b52247872c7abe366e3db9022ac20f2446d4f223f3e345394c93316
MD5 7ece8f464db279e494659705c61d5682
BLAKE2b-256 5619efd47e8c99b92c6b9a6f2a2c127f2cac3e152b509c02f25468563e199460

See more details on using hashes here.

File details

Details for the file function_tools-0.11.0-py3-none-any.whl.

File metadata

File hashes

Hashes for function_tools-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b02e0b2fd782bf31fdc48474e1cf20c8743dcc46625b1a3403ef9d48ebc8af46
MD5 14274915d9dd959a9fa81bcbe8bd9708
BLAKE2b-256 9d2fc34f7f60f78a344104fa80a1bea5a6333911813ef49899b1a2a62b6dfa46

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page