Реализация библиотеки управления машиной состояний в памяти приложения

Автор: Мясоедов А.А.

Журнал: Форум молодых ученых @forum-nauka

Статья в выпуске: 5 (105), 2025 года.

Бесплатный доступ

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

Машина состояний, конечный автомат, событие

Короткий адрес: https://sciup.org/140311874

IDR: 140311874

Текст научной статьи Реализация библиотеки управления машиной состояний в памяти приложения

В современной разработке программного обеспечения и построения информационных систем управление состоянием данных является одной из ключевых задач. Особенно это актуально в системах, работающих с документами, где необходимо отслеживать их жизненный цикл: создание, редактирование, утверждение, публикацию и другие события. Машина состояний — это математическая модель, которая позволяет формализовать переходы между состояниями объекта в зависимости от событий. В эту формализацию входят: правила перехода, условия, при которых может быть осуществлена смена состояния, побочные и сторонние эффекты при изменении состояния и другие подобные события.

Целью данной работы является создание библиотеки для управления машиной состояния [1] различных сущностей. Для реализации был выбран язык программирования Kotlin, так как он имеет глубокую поддержку функционального и контекстно-ориентированного программирования и отличную совместимость с JVM экосистемой.

Перед разработкой был проведён анализ существующих решений:

  • -    Spring Statemachine [2]. Spring Statemachine является мощной библиотекой, встроенной в экосистему Spring. Она позволяет описывать машину состояний декларативно и имеет широкую функциональность, а также возможность гибкой модификации. Однако данное решение недостатки, а именно: избыточность для простых сценариев, слишком тесная связь со Spring экосистемой;

  • -    Tinder. Tinder это легковесная библиотека для создания машин состояний на Kotlin [3]. Она предоставляет функциональность для описания различных состояний, переходов между ними, сторонних эффектов при переходах. Из минусов данной библиотеки можно выделить отсутствие возможности

  • с охранения состояния в персистентное хранилище и трудность модификации;

  • -    Самописные библиотеки. Данные решения часто создаются для решения конкретной задачи и не являются универсальными.

Было решено реализовать легковесную библиотеку машины состояний на Kotlin, которая соответствует следующим требованиям:

  • -    Декларативное описание состояний и переходов;

  • -    Интеграция с корутинами для асинхронных операций;

  • -    Возможность гибкой модификации библиотеки.

На рисунке 1 представлена диаграмма компонентов использования библиотеки.

Рис. 1 – Диаграмма компонентов использования библиотеки машины состояний.

Основной класс библиотеки StateMachine отвечает за совершение переходов, проверку их корректности и хранение состояний отдельных сущностей. Action и State пользовательские перечисления, которые зависят от конкретной бизнес области. На рисунке 2 представлена диаграмма классов машины состояний.

Рис. 2 – Диаграмма классов машины состояний.

В классе StateMachine поле transitions отвечает за переходы между состояниями, а поле states за список возможных состояний. Метод isActionAvailable проверяет допустимость перехода. Методы performAction и performAsync совершают действия, связанные с переходами синхронно и асинхронно с помощью корутин соответственно.

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

Статья научная