2010-02-13 7 views
32

Ich fange an zu denken, dass ich Windows WF zugunsten etwas einfacheres Graben sollte. Ich muss die Workflow-Ausführung nicht unbedingt für längere Zeit anhalten und später wiederherstellen. Ich möchte ein einfaches Zustandsmaschine-Rahmenwerk haben, das grundlegende Suspend/resume/abort (ohne Serialisierung) jedoch hat.Vergleich zwischen Stateless (auf Google-Code) und Windows Workflow

Ich habe die Stateless framework from Google Code heruntergeladen und fange an, damit zu spielen, würde aber gerne hören, was die anderen .NET-Programmierer da draußen verwenden.

EDIT Staatenlos scheint wirklich einfach zu implementieren, aber ich frage mich, ob es das Richtige für eine Candy-Maschine ist. In der Automatisierung fühle ich mich immer widersprüchlich darüber, wie State-Machines verwendet werden sollten. Obwohl ich den Begriff "Zustandsmaschine" benutze, mache ich das so lose, weil ich es eher wie ein Flussdiagramm verwende. Anstatt Zustände zu verwenden, um den aktuellen Modus darzustellen, in dem sich eine Maschine befindet, verwende ich sie, um Funktionen auszuführen. In diesem Fall würde ich also bei Stateless den Übergang von einem Zustand zum nächsten als Mechanismus zum Aufruf von Funktionen im Controller meiner Süßigkeitsmaschine verwenden. Gedanken?

+1

Ich dachte nur, ich würde hinzufügen, dass ich immer noch wirklich in Stateless verliebt bin. :) – Dave

Antwort

40

Während ich damit arbeite, werde ich versuchen, einige der Dinge aufzulisten, die ich finde. Die meisten werden aus analytischer Sicht ein wenig oberflächlich sein (besonders, da ich neu in beiden Frameworks bin), aber hoffentlich wird es jemandem helfen.

Stateless

Pros

  • Open-Source-
  • syntaktisch prägnant und leicht
  • ziemlich gute Beispiele in der Quecksilber-Repo auf Google Code
  • Ich kann lesen übersetzen mein UML-Zustandsdiagramm in Code mit statusless sehr quickl y.
  • Zustand Wartung ist sehr einfach - ich kann leicht hinzufügen und entfernen. Erweiterungsmethoden ermöglichen es mir, die Zustände in separaten Zeilen zu konfigurieren, sodass ich die Auslöser oder Aktionen, die ich nicht verwenden möchte, auskommentieren kann.
  • Weitergabe von Daten an/von State Machine ist einfach und Sie können es tun, wie Sie wollen, in Code-Behind.
  • Ebenso kann State Machine GUI auf eine Vielzahl von Arten aktualisieren. Im Moment modifiziere ich Daten über eine Schnittstelle, und dann verwendet die GUI einen Timer, um ihre Elemente zu aktualisieren. Ich könnte wahrscheinlich auch einen BackgroundWorker dafür verwenden.
  • Ich habe gerade angefangen, Substates für die Handhabung meiner GUI zu verwenden, die verschiedene Zustände wie Laufen, Angehalten, Abgebrochen und Leerlauf verwalten muss. Der angehaltene Zustand hat Unterzustände, da der Benutzer das System auf verschiedene Arten anhalten kann, aber die Wiederaufnahmeauslöser sind spezifisch für die Art und Weise, in der sie pausiert wurden. Ich liebe es, die Aktivierung/Deaktivierung meiner GUI und Tooltips mit einem leichtgewichtigen State-Machine-Framework zu verwalten.

Cons

  • keine eingebauten Mechanismen für Anhalten, Fortsetzen abbrechen
  • nur ein Entwickler das Projekt zu unterstützen. Ich bekam jedoch Unterstützung bei einem Problem, auf das ich kürzlich gestoßen bin.
  • Potenzial für den Missbrauch, wenn Sie nicht vorsichtig sind.Ich habe den Rahmen der Zustandsmaschine bei meinem ersten Versuch falsch implementiert. Es hat Monate lang gut funktioniert, und dann ist es schließlich gestorben, als ich einen sehr langwierigen Prozess hatte. Es stellt sich heraus, dass ich die State-Handler zum Abstapeln gebracht habe und ich einen Stack-Overflow-Zustand hatte.

Windows Workflow Foundation

Pros

  • grafischen Ansatz der Workflow
  • Unterstützung Ausdauer zu entwerfen, anhalten, fortsetzen, breche Workflows
  • MS hat wahrscheinlich eine große Team von Programmierern zur Unterstützung dieser
  • GUI macht es wirklich einfach zu deaktivieren/Aktivitäten

Cons die Tatsache zu der Gestaltung des Workflow

  • grafischer Ansatz wieder aktiviert versteckt, dass dieses Ding
  • um ziemlich komplex ist Verwenden Sie Persistenz und erhalten Sie Pause/Fortsetzen/Abbrechen, Sie müssen einen "Persistenz-Service" installieren und einrichten, etwas, das ich noch herausfinden muss, wie man arbeitet. Ich kann die SQL-Datenbank gut einrichten, aber zur Laufzeit bekomme ich eine Reihe von Fehlern, die ich nicht verstehe.
  • weil es von MS ist, wissen Sie nicht, ob es sehr lang sein wird oder völlig fallen gelassen wird.
  • Fehlerbehandlung ist ein wenig komisch, weil Sie entweder Code hinter oder verwenden können
  • Weitergabe von Daten von WF zu Ihrer Hauptanwendung ist kompliziert und erfordert so etwas wie WCF (eine andere Technologie habe ich nicht genug Zeit, um ausreichend zu lernen gerade jetzt) ​​oder verwenden Sie die ExternalDataExchange-Schnittstelle.
+0

Nachteile # 3 ist eine gültige Sorge nicht nur wegen der möglicherweise fallenlassen ... Aber sie haben eine große Änderung zwischen 3,5 und 4,0 von .net. Wer weiß, ob 5.0 mehr Änderungen mit sich bringt ... –

+0

absolut. Einer der Gründe, warum ich mich von WF abwenden wollte, war, dass ich nicht wusste, wann ich zu 4.0 wechseln würde, und sie würden einen der Workflows zugunsten eines anderen entfernen, der ganz anders war (als das, was ich getan habe) kann sich erinnern, zumindest). – Dave