Redesigning SWE, a simple workflow engine:
I totally redesigned the SWE project, as I had to use the state machines in one of my own projects, and learned from its experience. The API for SWE is highly simplified. Everything gets done with only one public class “SateMachine<SO, RT>”. This class implements four interfaces:
- IStateMachineBuilder
- IStateMachineController
- IStateMchine
- IStableStateMachine
To create and use a state machine is very simple. Each state has also got a very simple concept.
All that matters is:
State: Has a name, does some stuff, and decides what the next step is.
Below is a simple Light; on – off example:
Var smBuilder = StateMachine<Lamp, Lamp>.Create("On") .State("On", (s, l) => { l.IsOn = true; return StateMachine.NamedState("Off"); }) .State("Off", (s, l) => { l.IsOn = false; return StateMachine.NamedState("On"); }); Var sm = smBuilder.BindTo(theLamp); //Usage: each call, alternates the lamp between on and off. While(true){ sm.Process(); Thread.Sleep(10); }
In another post, I show a more advanced use of swe, with a csv parser.