Download the PHP package sbooker/workflow without Composer
On this page you can find all versions of the php package sbooker/workflow. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download sbooker/workflow
More information about sbooker/workflow
Files in sbooker/workflow
Package workflow
Short Description Simple workflow for FSM implementation
License MIT
Informations about the package workflow
Read in English
Workflow (sbooker/workflow
)
Простая, но строгая реализация паттерна "Конечный автомат" (State Machine) для доменных объектов и не только.
Назначение библиотеки
Во многих приложениях состояние объекта (статус заказа, заявки, документа) — это просто поле в базе данных. Логика, разрешающая или запрещающая смену статуса, часто разбросана по разным частям кода, что приводит к ошибкам и усложняет поддержку.
Эта библиотека решает проблему, формализуя управление жизненным циклом объекта. Она заставляет вас явно определить:
- Все возможные состояния (статусы), в которых может находиться объект.
- Все разрешенные переходы между этими состояниями.
Логика переходов инкапсулируется внутри самого объекта, что делает его поведение предсказуемым и надежным.
Ключевые особенности
- Явное определение переходов: Карта переходов (
TransitionMap
) — единственный источник правды о жизненном цикле объекта. - Инкапсуляция логики: Объект сам отвечает за смену своих состояний.
- Надежные статусы-объекты: Построена на litgroup/enumerable, что позволяет создавать типобезопасные и легко сохраняемые в БД статусы.
- Эффективные структуры данных: Использует
Ds\Map
иDs\Set
для удобного и типобезопасного определения карты переходов (объект статуса -> набор объектов статусов). Работает 'из коробки' с PHP-реализацией (polyfill), но для максимальной производительности рекомендуется C-расширениеds
. - Защита от невалидных состояний: Попытка выполнить недопустимый переход приведет к контролируемой ошибке
FlowError
.
Установка
Библиотека зависит от пакета php-ds/php-ds
, который предоставляет структуры данных Map
и Set
. По умолчанию используется PHP-реализация (polyfill), которой достаточно для большинства сценариев.
Для максимальной производительности (опционально) вы можете дополнительно установить C-расширение:
Быстрый старт
Рассмотрим пример управления жизненным циклом Заказа (Order
).
Шаг 1: Определите Статусы
Создайте класс статуса, унаследовав его от Sbooker\Workflow\Status
.
Шаг 2: Создайте класс Workflow
Унаследуйте свой класс от Sbooker\Workflow\Workflow
и реализуйте два абстрактных метода.
Шаг 3: Интегрируйте Workflow в ваш Агрегат
Ваш доменный объект просто создает экземпляр Workflow, не зная ничего о его начальном состоянии и правилах его изменения.
Шаг 4: Используйте в прикладном коде
License
See LICENSE file.