2009-10-04 15 views
19

Ich muss State-Maschinen schreiben, die in C# schnell laufen. Ich mag die Windows Workflow Foundation-Bibliothek, aber es ist zu langsam und überfüllt mit Funktionen (d. H. Schwer). Ich brauche etwas schneller, idealerweise mit einem grafischen Dienstprogramm, um die Diagramme zu entwerfen, und spucke dann C# -Code aus. Irgendwelche Vorschläge? Danke!Wie schreibe ich State Machines mit C#?

Antwort

21

Schließlich möchten Sie wahrscheinlich die neu gestaltete WF engine in .NET 4.0, wie es viel schneller ist und bietet eine Flussdiagramm-Aktivität (nicht ganz ein State Machine, funktioniert aber für die meisten Szenarien) und eine schöne Designer-Benutzeroberfläche. Aber da es noch nicht veröffentlicht wurde, ist das im Moment wahrscheinlich keine gute Antwort.

Als Alternative könnten Sie versuchen, stateless, eine Bibliothek speziell zum Erstellen von State Machine-Programmen in .NET. Es scheint keine Benutzeroberfläche zu bieten, sieht aber gut aus, um Ihre anderen Ziele zu erfüllen.

+0

Gute Info. Vielen Dank! – Nestor

+15

+1 für Staatenlose. Es ist eine großartige kleine Bibliothek und ein Hauch frischer Luft im Vergleich zu Workflow Foundation (sogar WF 4.0). –

6

Ja, Microsoft könnte mit State Machine WF ihrer Zeit voraus gewesen sein. Sequentielle Workflows werden wesentlich besser empfangen.

Als wir uns für die Verwendung einer Zustandsmaschine entschieden, rollten wir unsere eigene. weil wir mit einer Benutzeroberfläche kein akzeptables Framework finden konnten. Hier sind unsere Schritte. Ich hoffe, sie werden dir helfen.

  1. Erstellen Sie Ihren Zustand Schnittstelle:

    public interface IApplicationState 
    { 
        void ClickOnAddFindings();   
        void ClickOnViewReport(); 
        //And so forth 
    } 
    
  2. die Zustände erstellen und haben sie die Schnittstelle implementieren:

    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. die Zustände in der Haupt Klasse instanziiert.

    IApplicationState _addFindingsState; 
    IApplicationState _viewTheReportState; 
    _addFindingsState = new AddFindingsState(this); 
    _viewTheReportState = new ViewTheReportState(this); 
    
  4. Wenn der Benutzer etwas tut eine Zustandsänderung erfordern, die Methoden aufrufen, um den Zustand zu setzen:

    _state.ClickOnAFinding(); 
    

Natürlich sind die Aktionen in der jeweiligen Instanz des leben IApplicationState.

+0

Interessante Umsetzung. Danke für das Teilen. – Nestor