Termin36.LiteStateMachine
0.1.0-alpha
This is a prerelease version of Termin36.LiteStateMachine.
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package Termin36.LiteStateMachine --version 0.1.0-alpha
NuGet\Install-Package Termin36.LiteStateMachine -Version 0.1.0-alpha
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Termin36.LiteStateMachine" Version="0.1.0-alpha" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Termin36.LiteStateMachine --version 0.1.0-alpha
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Termin36.LiteStateMachine, 0.1.0-alpha"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Termin36.LiteStateMachine as a Cake Addin #addin nuget:?package=Termin36.LiteStateMachine&version=0.1.0-alpha&prerelease // Install Termin36.LiteStateMachine as a Cake Tool #tool nuget:?package=Termin36.LiteStateMachine&version=0.1.0-alpha&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
О проекте
Проект формирует библиотеку для построения машин конечных состояний (State Machine), с помощью которых возможно строить сложную модель поведения с реакцией на воздействия. Ценность библиотеки в простоте и независимости от окружения, благодаря чему ее можно без сомнений интегрировать например в слой домена (DDD)
Возможности ядра
- Хранение состояния во внешнем хранилище
- Журнал транзакций (в разработке)
- Обработка событий
- Активация и деактивация состояния (OnActivate и OnDeactivate)
- Вход и выход изи состояния (OnEntry и OnExit)
- Обработка пользовательского события на срабатывание триггера (OnAction, OnActionIf)
- Переходы между состояниями
- Без проверки условий
- Переход с известным конечным состоянием (ChangeState)
- Переход с определением конечного состояния с помощью функции (ChangeStateDynamic)
- Игнорирование перехода (NotChangeState)
- С проверкой условия
- Переход с известным конечным состоянием с проверкой условия (ChangeStateIf)
- Переход с определением конечного состояния с помощью функции с проверкой условия (ChangeStateDynamicIf)
- Игнорирование перехода с условием (NotChangeStateIf)
- Без проверки условий
Пример использования
StateMachine<State, Trigger> stateMachine = new StateMachine<State, Trigger>(State.StateA);
stateMachine.Configuration(State.StateA)
.OnAction(_triggerRegister, RegistrationPeople);
.ChangeState(_triggerMove, State.StateMoving);
stateMachine.Configuration(State.StateMoving)
.ChangeStateIf(_triggerRegister, State.StateA, IsAllowRegistration, "Регистрировать пользователей сейчас нельзя");
stateMachine.ValidateStateMachine();
await stateMachine.Fire(_triggerRegister, new People("Иванов", "Иван");
await stateMachine.Fire(_triggerMove, null);
await stateMachine.Fire(_triggerRegister, new People("Петров", "Петр"); // сработает исключение, так как обработать нельзя
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net7.0
- System.Linq.Async (>= 6.0.1)
- System.Linq.Async.Queryable (>= 6.0.1)
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.1.0 | 1 | 2/1/2024 |
0.1.0-alpha | 1 | 2/2/2024 |