5

Ich verwende Stateless Framework (https://code.google.com/p/stateless/), um endliche Zustandsmaschine in meiner Anwendung zu modellieren. Es gibt bestimmte Zustände, die eine gewisse Logik ausführen sollten und dann sofort zum nächsten Zustand übergehen. Ich frage mich, ist es gute Praxis, dies wie folgt zu tun:Sollte ich Auslöser auslösen, um den Status von der OnEntry() -Methode in endlicher Zustandsmaschine zu ändern?

  var machine = new StateMachine<State, Trigger>(State.Idle); 
      machine.Configure(State.StateA) 
      .OnEntry(() => 
      { 
       DoSomeStuff(); 
       _machine.Fire(Trigger.TriggerB);  // move to StateB 
      }); 

Ist das gute FSM Design? Wenn nicht, was wäre besser Ansatz? Die Idee, die ich zu implementieren versuche, besteht darin, bestimmte Zustände zu haben, die die Maschine automatisch in den nächsten Zustand bringen, ohne einen externen Code zu haben, der darauf wartet, dass DoSomeStuff() beendet wird und dann die Maschine in den nächsten Zustand versetzt.

Antwort

6

Sie scheinen über Staat Push vs State Pull zu sprechen. Beides funktioniert, ein Ansatz kann in manchen Situationen effizienter sein.

Es ist völlig in Ordnung, einen State-Push-Ansatz zu haben, bei dem ein Zustand etwas funktioniert und einen Übergang aufruft.

Verwandte Themen