2009-10-04 16 views
19

Ho bisogno di scrivere macchine a stati che corrono velocemente in C#. Mi piace la libreria Windows Workflow Foundation, ma è troppo lenta e affollata di funzionalità (ad es. Pesante). Ho bisogno di qualcosa di più veloce, idealmente con un'utilità grafica per progettare i diagrammi, e quindi sputare il codice C#. Qualche suggerimento? Grazie!Come scrivere macchine a stati con C#?

risposta

21

In definitiva, probabilmente si desidera il nuovo WF engine in .NET 4.0, poiché è molto più veloce e fornisce un'attività del diagramma di flusso (non una macchina a stati, ma funziona per la maggior parte degli scenari) e una buona esperienza di progettazione dell'interfaccia utente. Ma dal momento che non è ancora stato rilasciato, probabilmente non è una buona risposta per ora.

In alternativa, è possibile provare stateless, una libreria specifica per la creazione di programmi macchina di stato in .NET. Non sembra fornire un'interfaccia utente, ma sembra adatto per soddisfare gli altri tuoi obiettivi.

+0

Buone informazioni. Grazie! – Nestor

+15

+1 per gli apolidi. È una piccola biblioteca e una boccata d'aria fresca rispetto a Workflow Foundation (anche WF 4.0). –

6

Sì, Microsoft avrebbe potuto essere in anticipo sui tempi con State Machine WF. I flussi di lavoro sequenziali vengono ricevuti molto meglio.

Quando abbiamo deciso di utilizzare una macchina a stati, abbiamo eseguito il rollover. perché non siamo riusciti a trovare un framework accettabile con un'interfaccia utente. Ecco i nostri passi. Spero che ti aiuteranno.

  1. Crea la tua interfaccia Stato:

    public interface IApplicationState 
    { 
        void ClickOnAddFindings();   
        void ClickOnViewReport(); 
        //And so forth 
    } 
    
  2. Creare gli stati e li hanno implementano l'interfaccia:

    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. istanziare gli stati nel vostro principale classe.

    IApplicationState _addFindingsState; 
    IApplicationState _viewTheReportState; 
    _addFindingsState = new AddFindingsState(this); 
    _viewTheReportState = new ViewTheReportState(this); 
    
  4. Quando l'utente fa qualcosa che richiede un cambiamento di stato, chiamare i metodi per impostare lo stato:

    _state.ClickOnAFinding(); 
    

Naturalmente, le azioni vivranno nel caso particolare della IApplicationState.

+0

Interessante implementazione. Grazie per la condivisione. – Nestor