unity machine c# state-machine

machine - stateless c#



¿Cómo escribir máquinas de estado con c#? (2)

En última instancia, probablemente desee el nuevo motor WF rediseñado en .NET 4.0 , ya que es mucho más rápido y proporciona una actividad de diagrama de flujo (no es una máquina de estado, pero funciona para la mayoría de los escenarios) y una experiencia de interfaz de usuario agradable. Pero como todavía no se ha publicado, probablemente no sea una buena respuesta por el momento.

Como alternativa, puede probar stateless , una biblioteca específicamente para crear programas de máquina de estado en .NET. No parece proporcionar una interfaz de usuario, pero se ve bien adaptado para cumplir con tus otros objetivos.

Necesito escribir máquinas de estado que funcionen rápido en c #. Me gusta la biblioteca de Windows Workflow Foundation, pero es demasiado lenta y está repleta de funciones (es decir, pesada). Necesito algo más rápido, idealmente con una utilidad gráfica para diseñar los diagramas y luego escupir el código c #. ¿Alguna sugerencia? ¡Gracias!


Sí, Microsoft puede haber estado adelantado a su tiempo con State Machine WF. Los flujos de trabajo secuenciales se están recibiendo mucho mejor.

Cuando decidimos usar una máquina de estados, hicimos rodar la nuestra. porque no pudimos encontrar un marco aceptable con una interfaz de usuario. Aquí están nuestros pasos. Espero que te ayuden.

  1. Crea tu interfaz de estado:

    public interface IApplicationState { void ClickOnAddFindings(); void ClickOnViewReport(); //And so forth }

  2. Crea los estados y haz que implementen la interfaz:

    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()); } }

  3. Crea una instancia de los estados en tu clase principal.

    IApplicationState _addFindingsState; IApplicationState _viewTheReportState; _addFindingsState = new AddFindingsState(this); _viewTheReportState = new ViewTheReportState(this);

  4. Cuando el usuario hace algo que requiere un cambio de estado, llame a los métodos para establecer el estado:

    _state.ClickOnAFinding();

Por supuesto, las acciones vivirán en la instancia particular del IApplicationState.