C# GUI アプリケーションにステート マシンを使用しています。これで、いくつかの状態と、ErrorHappened という 1 つの状態ができました。ステート マシンは、すべての状態からこれらのエラー状態に移行できます。しかし、このアーキテクチャを使用すると、ステート マシンが ErrorHappened 状態になったときにエラーが発生したことがわかります。
しかし、ある状態 A から状態 B への遷移中にエラーが発生した場合、どうすればよいでしょうか? 問題は、ステート マシンがステート A からステート B に移行し、ステート ErrorHappened になることです。通常、状態 B への遷移が完了したときにアクションを実行します。移行中にエラーが発生した場合、このアクションは実行しません。もちろん、m_ErrorHappened のような bool 変数を導入することもできますが、私の意見では、ステート マシンがあるため、ステート変数を使用する必要はありません。
説明が明確であり、助けになることを願っています。
サンプルコード:
StateMachine sm; // initial state is state A
void AtoB() // executed during transition from A to B
{
if(DoSomething())
{
print("Error");
// Event ErrorHappened, state machine goes into state Error
sm.GotoState(ErrorHappened);
}
}
void TransitionEnd(State NewState)
{
if(NewState==B)
{
GreenLight();
}
if(NewState==Error)
{
RedLight();
}
}
main()
{
sm.GotoState(B);
}
エラーが発生すると、緑色のライトが点灯し、次に赤色のライトが点灯します。ステート マシンが状態 A から状態 B、エラー状態に移行するためです。エラーが検出され、赤いライトだけが点灯する方法はありますか?