Должен ли я запустить триггер, чтобы изменить состояние из метода OnEntry() в конечном автомате?
Я использую инфраструктуру без сохранения состояния ( https://code.google.com/p/stateless/) для моделирования конечного автомата в моем приложении. Существуют определенные состояния, которые должны выполнять некоторую логику, а затем немедленно переходить в следующее состояние. Мне интересно, это хорошая практика, чтобы сделать это следующим образом:
var machine = new StateMachine<State, Trigger>(State.Idle);
machine.Configure(State.StateA)
.OnEntry(() =>
{
DoSomeStuff();
_machine.Fire(Trigger.TriggerB); // move to StateB
});
Это хороший дизайн FSM? Если нет, то какой подход лучше? Идея, которую я пытаюсь реализовать, состоит в том, чтобы иметь определенные состояния, которые автоматически переводят машину в следующее состояние без какого-либо внешнего кода, который ожидает завершения DoSomeStuff() и затем запускает машину для перехода в следующее состояние.
1 ответ
Вы, кажется, говорите о состоянии push против состояния pull. Обе работы, один подход может быть более эффективным в некоторых ситуациях.
Прекрасно использовать подход push-состояний, когда одно состояние выполняет некоторую работу и вызывает переход.