Hi,
I found some frameworks for handling workflows:
I found some frameworks for handling workflows:
- ApprovaFlow
- simple state machine
- objectflow
- jazz
- nstate
... but best of all alternatives seems to be "stateless" (see: https://github.com/dotnet-state-machine/stateless ).
The following features / best practices are made (following the examples-folder of the github repo):
- choose or build a class for State
- choose or build a class for Triggers
- create an object for a StateMachine<State,Trigger>
- initialization / get-set possibility to variables outside)
- configuring phase
- stateMachineObject.IsInState(stateItem)
- stateMachineObject.PermittedTriggers
- stateMachineObject.CanFire(triggerItem)
- stateMachineObject.Fire(triggerItem)
- stateMachineObject.FireAsync(triggerItem)
Configuration Options fluid-api style:
- stateMachineObject.Configure(stateItem)
- SubstateOf(stateItem) // Hierarchical State
- PermitReentry(Trigger)
- Permit(Trigger, State)
- PermitIf(Trigger, State, Guard)
- Ignore(Trigger)
- InternalTransition
- OnEntry(() => action());
- OnEntryAsync(async () => await action());
- OnEntryFrom(trigger, x => action()); // Parameterized Trigger
- OnExit(() => action());
Support for DOT-graph - visualization (see: Graphviz): .ToDotGraph()
kr,
Daniel