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