2010-12-09 8 views
3

Ich brauche Beratung in Bezug auf eine Anforderung in einem unserer Projekt. Wir versuchen, den Fluss von Methodenaufrufen aus einer Text- oder XML-Datei zu steuern.Workflow wie System Code ändern

Zum Beispiel:

string response = new Assembly1.Class1().DoStuff(); 
if (response == "OK") 
{ 
    new Assembly1.Class2().DoStuff(); 
} 
else if (response == "NOTOK") 
{ 
    new Assembly2.Class1().DoStuff(); 
} 

Wie kann ich über Code in einem gewissen Format darstellen, die durch nicht-technischen Anwender geändert werden, können die Reihenfolge der Funktionsaufrufe zu ändern.

+0

Also, Sie möchten C# -Code in XML irgendwie darstellen? Und auf welche Weise ist das für den "nicht-technischen Nutzer" einfacher? –

+0

Gute Frage als Teil von anpassbaren Workflow-Prozessen. – acoolaum

+0

Nicht-technischer Teil ist etwas falsch .. was wir brauchen, ist in der Lage, den Fluss zu ändern. Es wird nicht von nichttechnischen Personen verändert. – Naveed

Antwort

0

Ich denke, dass Sie Reflexion für diesen Zweck verwenden oder Code on-fly von XML generieren können. Es gibt viele Beispiele hier.

+0

Gibt es ein einfaches Open-Source-Projekt, das die Arbeit für mich erledigen kann? Jede gute Empfehlung für "anpassbare Workflow-Prozesse" -Lösung. – Naveed

+0

@Naveed, ich kenne niemanden, sorry. Sie können Ihre eigenen einfachen DSL erstellen, wie Joel sagte. – acoolaum

0

Factory design pattern kann eine gute Hilfe für Sie sein. Mit Werksmuster können Sie die Objekte zur Laufzeit zuweisen und dieses Objekt den Ablauf des Prozesses bestimmen lassen ...

Sie sollten verschiedene Klassen mit einer Methode say WorkFlow() (referenziert in einer Schnittstelle) erstellen. Die Methode sollte in der Lage sein, andere Methoden basierend auf dem Bedarf aufzurufen.

Zu Beginn des Prozesses lesen Sie einfach die XML-Datei und erstellen ein Objekt für die entsprechende Klasse und rufen die Workflow-Methode dieser Klasse auf, die wiederum die vorgegebene Sequenz ausführt.

2

Grundsätzlich müssen Sie entscheiden, was Sie erreichen möchten.

C# -Code enthält eine gewisse Komplexität, aber diese Komplexität ist da, weil C# -Code sehr flexibel ist.

Sie müssen entscheiden, wie viel Flexibilität Sie Ihren nicht technischen Benutzern geben möchten. Wenn Sie ihnen die gleiche Flexibilität wie C# geben möchten, können Sie sie auch in C# programmieren.

Andernfalls wird der erste Schritt darin bestehen, eine domänenspezifische Sprache zu erfinden, die die Konfiguration beschreibt, die sie ausführen werden. Bevor Sie das tun, sollten Sie jedoch untersuchen, ob es bereits domänenspezifische Sprachen gibt, die bereits das ausführen, was Sie beschreiben.

Der nächste Schritt, nachdem eine domänenspezifische Sprache definiert wurde, besteht darin, diese Sprache zu analysieren und zu interpretieren. Dies ist relativ kompliziert und ist in der Regel das Thema eines einsemestrigen Kurses in der Schule namens Compilers. Wenn Sie keinen Compiler-Kurs belegt haben, gibt es Bücher, die Sie lesen können. Sie können viele Schritte überspringen, indem Sie eine Auszeichnungssprache wie XML und eine standardmäßige XML-Parsing-Bibliothek verwenden.

+0

ich überprüfte einfaches Staatsmaschinenprojekt (http://simpletatemachine.codeplex.com/), das DSL benutzt, das in boo geschrieben wird, aber nicht genau den Zweck dient. Ist DSL der richtige Weg, da der Workflow in meinem Fall nicht so kompliziert sein wird; Es wird einfache Funktionsaufrufe und if-Anweisungen geben. – Naveed

+0

Eine Zustandsmaschine ist definitiv der richtige Weg, wenn Sie versuchen, den Steuerungsablauf basierend auf Eingabedaten zu ändern. State-Maschinen sind sehr einfach zu implementieren und herauszufinden ... wenn Sie eine verwenden werden, nur lernen, genug, um Ihre eigenen zu schreiben, ist es ein beginnendes Programmierproblem.Für welches DSL du willst, das ist wirklich eine Designentscheidung. Sie können Ihre eigenen erfinden oder versuchen, jemanden zu finden, der etwas Ähnliches getan hat. –