Трябва ли да задействам задействане за промяна на състоянието от метода 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