如果你可以使用一個狀態機,那麼我建議叫StateLess by Nicholas Blumhardt (Autofaq creator)一個開源項目。他的方法避免了運行時引擎持久運行的工作流的問題,因爲狀態是由諸如字符串或int之類的簡單變量定義的。
下面是一個簡單的狀態機:
var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
phoneCall.Configure(State.OffHook)
.Permit(Trigger.CallDialed, State.Ringing);
phoneCall.Configure(State.Ringing)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.CallConnected, State.Connected);
phoneCall.Configure(State.Connected)
.OnEntry(() => StartCallTimer())
.OnExit(() => StopCallTimer())
.Permit(Trigger.LeftMessage, State.OffHook)
.Permit(Trigger.HungUp, State.OffHook)
.Permit(Trigger.PlacedOnHold, State.OnHold);
// ...
phoneCall.Fire(Trigger.CallDialled);
Assert.AreEqual(State.Ringing, phoneCall.State);
你的狀態可以是一個整數,這將讓你從一個數據庫給它的當前狀態。
var stateMachine = new StateMachine<State, Trigger>(
() => myState.Value,
s => myState.Value = s);
您可以在短短的一個裝配實現這一點,比起你需要運行Windows工作流的多個項目:這可以在狀態機的構造函數如下設置。維護是非常低的,沒有「設計師」爲您生成代碼等等。再次,它很簡單,而且還有美感。
+1代碼示例。 – georgiosd 2012-05-07 19:55:07