Workflow plays a critical role in business applications, but very few use it (me included). I never used WF in my dev even though I believe workflow is a critical tool for ensuring quality code. The reason is obvious.
In case of WF, usually pain is more than gain. For a simple workflow you’ve got to deal with lots of not so interesting fluff.
The solution is obvious: Cut the crap!
I want to implement a tiny state machine suitable for developing workflows. No crab. Just a little dll to reference with a flexible design. Here comes the story.
Everybody talks about the on-off switch to describe state machine, so do I. Assume the following state machine. A lamp can be in the off or on state and a click will change the state. If it is on will become off and vise versa.
Here comes the code that is required to be implemented with WF state machine. Well, I don’t write the code, its a pretty long story so check the msdn article yourself.
So much crap wouldn’t convince me to use the state machine at all. I also hate to define events and a bunch of codes and classes for such a simple task. This is what I want to do:
var onOffWf = WorkFlow.Start(ILamp) .State("Off", l => l.IsOn, //Enterance condition l => l.MakeOff()) //What happens at the state .Then("On") .State("On", l => k.IsOff, //Enterance condition l => l.MakeOn()) //What happens at the state .Then("Off")
I want all the code to be in one place and also easy to read and understand.
One more thing that I want is to be able to easily save the state of my lamp and its workflow in with my object. For example I want to add a column to my Lamp table (lampId, WorkFlowState) which holds the stat of my lamp. So each time I load my lamp, I continue from where I was before. This is the code that I want to go on to my button OnClick() event:
void OnClick(...) { MyLamp.MoveNext(); }
I also would like to bind the status of my lamp to its state as:
<TextBox ItemSource="{Binding Path=StatusTitle}"/>
onOffWf has a property onOffWf.StatusTitle.
Is that possible? Not with WF. If you know a way let me know quick because I am going to implement this and some time would be spent.
Leave a Reply