Подтвердить что ты не робот

Как писать государственные машины с помощью С#?

Мне нужно написать состояние машин, которые быстро запускаются в С#. Мне нравится библиотека Windows Workflow Foundation, но она слишком медленная и переполненная функциями (т.е. Тяжелыми). Мне нужно что-то быстрее, в идеале с графической утилитой для создания диаграмм, а затем выплюнуть код С#. Какие-либо предложения? Спасибо!

4b9b3361

Ответ 1

В конечном счете вам, вероятно, понадобится недавно переработанный WF-движок в .NET 4.0, поскольку он намного быстрее и обеспечивает работу блок-схемы (не совсем конечный автомат, но работает для большинства сценариев) и приятный дизайнерский интерфейс. Но поскольку он еще не выпущен, на данный момент это, вероятно, не очень хороший ответ.

В качестве альтернативы вы можете попробовать stateless - библиотеку, специально предназначенную для создания программ конечных автоматов в .NET. Он, похоже, не предоставляет пользовательский интерфейс, но выглядит хорошо подходящим для выполнения ваших других целей.

Ответ 2

Да, Microsoft, возможно, опередила свое время с State Machine WF. Последовательные рабочие процессы получаются намного лучше.

Когда мы решили использовать конечный автомат, мы сделали свой собственный. потому что мы не смогли найти приемлемую структуру с пользовательским интерфейсом. Вот наши шаги. Надеюсь, они вам помогут.

  • Создайте свой интерфейс:

    public interface IApplicationState
    {
        void ClickOnAddFindings();        
        void ClickOnViewReport();
        //And so forth
    }
    
  • Создайте состояния и попросите их реализовать интерфейс:

    public class AddFindingsState : IApplicationState
    {
        frmMain _mForm;
    
        public AddFindingsState(frmMain mForm)
        {
            this._mForm = mForm;
        }
    
        public void ClickOnAddFindings()
        {            
        }
    
        public void ClickOnViewReport()
        {
            // Set the State
            _mForm.SetState(_mForm.GetViewTheReportState());
        }
    }
    
  • Создание состояний в основной класс.

    IApplicationState _addFindingsState;
    IApplicationState _viewTheReportState;
    _addFindingsState = new AddFindingsState(this);
    _viewTheReportState = new ViewTheReportState(this);
    
  • Когда пользователь делает что-то требующее изменения состояния, вызовите методы для установки состояния:

    _state.ClickOnAFinding();
    

Конечно, действия будут жить в конкретном экземпляре IApplicationState.