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


person matori82    schedule 23.05.2014    source источник


Ответы (1)


Кажется, вы говорите о государственном толчке против государственного притяжения. Оба работают, один подход может быть более эффективным в некоторых ситуациях.

Совершенно нормально иметь подход с проталкиванием состояния, когда одно состояние выполняет некоторую работу и вызывает переход.

person oleksii    schedule 26.05.2014