Должен ли я запустить триггер, чтобы изменить состояние из метода 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-состояний, когда одно состояние выполняет некоторую работу и вызывает переход.

Другие вопросы по тегам