2009-10-04 14 views
19

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

Respuesta

21

En última instancia, es probable que desee el recién rediseñado WF engine in .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 dado que aún no se ha publicado, probablemente esta no sea una buena respuesta por ahora.

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 parece adecuada para cumplir sus otras metas.

+0

Buena información. ¡Gracias! – Nestor

+15

+1 para apátridas. Es una gran biblioteca pequeña y un soplo de aire fresco en comparación con Workflow Foundation (incluso WF 4.0). –

6

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

Cuando decidimos utilizar una máquina de estados, lanzamos la nuestra. porque no pudimos encontrar un marco aceptable con una IU. Aquí están nuestros pasos. Espero que te ayuden.

  1. Crear la interfaz de estado:

    public interface IApplicationState 
    { 
        void ClickOnAddFindings();   
        void ClickOnViewReport(); 
        //And so forth 
    } 
    
  2. Crear los estados y hacer que implementan 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. instanciar los estados en su 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, llamar a los métodos para establecer el estado:

    _state.ClickOnAFinding(); 
    

Por supuesto, las acciones van a vivir en el caso particular de la IApplicationState.

+0

Implementación interesante. Gracias por compartir. – Nestor