Реализация модуля управления персистентной машиной состояний с помощью Kotlin Exposed
Автор: Мясоедов А.А.
Журнал: Форум молодых ученых @forum-nauka
Статья в выпуске: 5 (105), 2025 года.
Бесплатный доступ
В данной работе рассмотрены основные аспекты реализации машины состояний для сущностей с персистентным хранилищем. Статья посвящена проблемам использования Kotlin DSL и фреймворка Exposed для создания машины состояний и взаимодействия с её хранилищем.
Машина состояний, конечный автомат, переход, персистентность
Короткий адрес: https://sciup.org/140311875
IDR: 140311875
Текст научной статьи Реализация модуля управления персистентной машиной состояний с помощью Kotlin Exposed
В современной мире в информационных системах есть критически важная задача – управление состоянием данных. Это особенно важно в процессах, где требуется отслеживать жизненный цикл объектов, например документов. Машина состояний позволяет формализовать переходы между состояниями, обеспечивая предсказуемость и надежность системы. Однако в реальных приложениях состояния должны сохраняться между сеансами работы, что требует их персистентности.
Целью данной работы является создание модуля для управления персистентной машиной состояния. Для реализации был выбран язык программирования Kotlin [1] и фреймворк для работы с базами данных Exposed, так как они имеют отличную совместимость с JVM экосистемой и Exposed упрощает взаимодействие с SQL-базами данных, предоставляя DSL для запросов.
Перед разработкой был проведён анализ существующих решений:
-
- Akka Persistence. Мощное решение, которое отлично подходит для распределённых систем и задач, требующих масштабирования, но в то же время имеет высокий порог вхождения и сложность эксплуатации;
-
- Camunda [2]. Camunda это платформа для автоматизации бизнес-процессов (BPM, Business Process Management) и управления workflow с открытым исходным кодом. Она позволяет проектировать, выполнять, мониторить и оптимизировать бизнес-процессы с помощью BPMN 2.0. К минусам данного решения можно отнести сложность настройки и избыточность функциональности;
-
- Самописные реализации на основе Event Sourcing. Данные решения часто требуют больших трудозатрат и плохо переиспользуемы.
Было решено реализовать модуль машины состояний на Kotlin Exposed [3], который соответствует следующим требованиям:
-
- Поддержка транзакционности;
-
- Легковесность и простота интеграции.
На рисунке 1 представлена диаграмма развертывания модуля.

Рис. 1 – Диаграмма развёртывания модуля машины состояний.
Модуль состоит из ядра, содержащего логику управления переходами и компонентов для работы с базой данных. На рисунке 2 представлена er-диаграмма сущностей модуля.

Рис. 2 – ER-диаграмма сущностей машины состояний.
В таблице States содержится история статусов сущностей идентификатор записи, идентификатор сущности, имя статуса, время перехода в этот статус. В таблице Transitions содержится информация о переходах между статусами, можно рассматривать её как аудит лог. В данной таблице содержатся следующие колонки: идентификатор записи, идентификаторы предыдущего и нового статусов, идентификатор сущности, к которой относится переход, название события перехода и время перехода.
Разработанный модуль может использоваться в информационных системах, где требуется персистентное управление состояниями объектов. В будущем возможно расширение функциональности с помощью добавления асинхронных операций.