Open gaufung opened 3 weeks ago
状态机(State Machine) 是软件开发过程中很常见的概念,在编程语言的语法层面,我们需要写很多 if-else
语句,如果想要在但是我们可以借助 Stateless
开源库来简化这个过程。 举例来讲,一个灯控制系统,它的控制逻辑是这样的:
那么使用编程语言实现的话,代码如下:
if (CurrentState == State.ON)
{
CurrentState = State.OFF;
}
else
{
if(_enforceTimeConstraint)
{
if (IsLightNeeded()) CurrentState = State.ON;
}
else
{
CurrentState = State.ON;
}
}
当控制逻辑变得的复杂的时候,我们可以借助 Stateless
简化我们的代码
enum trigger { Toggle }
enum State { On, Off }
var CurrentState = State.Off;
StateMachine<State, trigger> _machine = new StateMachine<State, trigger>(() => CurrentState, s => CurrentState = s);
_machine.Configure(State.On)
.Permit(trigger.Toggle, State.Off);
_machine.Configure(State.Off)
.PermitIf(trigger.Toggle, State.On, () => IsLightNeeded(), "Toggle allowed")
.PermitReentryIf(trigger.Toggle, () => !IsLightNeeded(), "Toggle not allowed");
_machine.Fire(trigger.Toggle);
https://github.com/dotnet-state-machine/stateless