Мне нужно написать состояние машин, которые быстро запускаются в С#. Мне нравится библиотека 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.