Ich habe in der Vergangenheit als Programmierer an einigen Workflow-Engines gearbeitet, hatte aber nie eine Ahnung, warum wir die Workflow-Engines überhaupt ausgewählt haben. Und als Programmierer weiß ich, dass es mindestens 100 Möglichkeiten gibt, etwas zu tun, wenn Sie Code schreiben, aber nur wenige sind die besten!
Ich verstehe immer noch nicht, welche Anwendungsfälle am besten durch Workflow-Engines (oder vielmehr deren Konzept) gelöst werden können, als eine gute DI-fähige Anwendung zu entwerfen. Ich suche nach allgemeinen Merkmalen für domänenneutrale Anwendungsfälle, bei denen Workflow-Engines eine der besten Optionen darstellen.
Meine Frage lautet also: Was sind die allgemeinen Merkmale einer Anforderung, die als Signal für die Entscheidung für eine gute Workflow-Engine und die Codierung um diese herum verwendet werden können?
Antworten:
Eine Workflow-Engine ist nützlich, wenn Sie von Anfang bis Ende arbeiten müssen, aber es gibt viele verschiedene Pfade / Logik / Regeln, um dahin zu gelangen.
Nehmen wir zum Beispiel an, ich schreibe ein Programm, das Inhalte veröffentlicht. In meinem Fall durchläuft die Veröffentlichung einen Überprüfungsprozess, eine rechtliche und dann eine endgültige Genehmigung. Ich schreibe das Programm auf, das meine Prozesslogik und -schritte implementiert. Nun, diese Arbeit ist großartig für mich und meine Firma. Also entscheide ich mich, dass andere mein Programm verwenden sollen.
Leider veröffentlicht nicht jeder Inhalt mit demselben Prozess. Anstatt separate Prozesse für jeden einzelnen Fall zu schreiben, würden wir einen Workflow-Prozess implementieren, sodass das Programm flexibel ist, um allen gerecht zu werden. Egal wie viele Schritte, Regeln oder Logik zwischen diesen beiden Punkten liegen, das Ergebnis ist das gleiche.
Wenn Sie also Prozesse haben, die von Anfang bis Ende variabel sind, verwenden Sie einen Workflow. Wenn derselbe Prozess von allen verwendet werden kann, benötigen Sie keinen Workflow.
quelle
Ich weiß, dass Sie nach Anwendungsfällen gefragt haben, aber es ist einfacher, die Vorteile aufzulisten, als sich alle möglichen Anwendungsfälle vorzustellen. Die Vorteile hängen natürlich von der Engine und der Sprache ab, die Sie vergleichen, aber im Allgemeinen:
Wenn Sie Regeln als Daten anstelle von Code beibehalten, müssen Sie sie nicht erneut kompilieren, damit Sie Änderungen schnell testen, zur Laufzeit ändern usw. Dies ist jedoch kein großer Vorteil, wenn Sie sie nicht erst erneut kompilieren müssen.
Es ist vernünftigerweise zu erwarten, dass Benutzer die Regeln bearbeiten. Sie können sie möglicherweise auf eine Weise interaktiv basteln, die nicht durchführbar ist, wenn ein Programmierer Code für sie schreibt.
Das Behalten von Regeln als Daten ermöglicht das Schreiben von Tools zum Visualisieren und Ändern der Daten.
Das Behalten von Regeln als Daten erleichtert die Metaprogrammierung - Sie können Code schreiben, um die Daten zu analysieren und komplexer einzufügen, was für Code sehr schwierig wäre.
All diese Dinge können direkt mit Code geschehen (z. B. - Schreiben Sie einen C # -Parser, um alle Regeln eines bestimmten Typs zu finden, und generieren Sie Code für weitere Regeln. Fügen Sie ihn dynamisch in eine Assembly ein, sodass die Assembly entladen werden kann. Schreiben Sie Tools für Benutzer können dies auch mit Ihrem Visualizer und Editor tun. Dies kann jedoch abhängig von Ihrer Sprache sehr viel schwieriger sein (Programmierer, die Lisp verwenden, können die Punkte 1-4 als "Programmieren" bezeichnen).
quelle
IMHO der einzige Fall, in dem Sie diese Art von Dingen verwenden sollten, ist, wenn es von weniger wertvollen Benutzern konfiguriert werden kann. Wenn Sie Ihr Problem lösen können, indem Sie ihnen ein Werkzeug geben, dann arbeiten Sie wieder an etwas Wichtigerem als an einem.
Wenn Sie es dennoch für sie einrichten müssen, können Sie sich 10 verschiedene Möglichkeiten vorstellen, um mit einem vertrauten Tool das gleiche Ergebnis zu erzielen, und es wird viel einfacher zu unterstützen und anzupassen sein.
quelle
Das sieht aus wie eine alte Frage, taucht aber in freier Wildbahn häufig auf. Ich stimme Jons Antwort zu . Ich habe festgestellt, dass Workflow-Engines in den folgenden Szenarien sehr produktiv sind:
Seien Sie sehr vorsichtig und kritisch, um festzustellen, ob Ihre Problemdomäne / -anforderungen einen Geschäftsprozess aufweisen. Versuchen Sie nicht, ihn in einen Workflow "einzupassen".
quelle
Ich verwende einige Richtlinien, um Workflow-Engines vorzuschlagen.
1) Wenn die Business Analysten keinen codierenden Hintergrund haben, aber Diagramme zeichnen können.
Moderne Workflow-Engines verwenden die Notation zur Geschäftsprozessmodellierung oder die weniger leistungsfähigen Versionen von SharePoint und ähnlichen Systemen. Mit diesen können technisch kompetente, jedoch von der Programmierung herausgeforderte Mitglieder des Teams viele Arbeitsabläufe entwerfen und entwickeln.
2) Wenn Sie den Arbeitsfortschritt überwachen müssen, führen Sie Eskalationen durch, wechseln Sie zwischen computergesteuerten Prozessen und menschengesteuerten Prozessen hin und her.
Überwachung und Selbstreferenz sind Markenzeichen moderner Workflow-Engines.
quelle
Aus HR-Sicht sind Workflow-Engines sehr wichtig.
Sie sorgen für Transparenz
Diese Transparenz hilft, den Prozess voranzutreiben und die Eigenverantwortung zu fördern.
Vorausgesetzt, die Formulare sind integriert und intelligent und unterstützen die Geschäftslogik. Dies wirkt sich auch dramatisch auf die Zeitachse, die Verarbeitungseffizienz und die Datenqualität aus. Sicherheit ist ebenfalls ein wichtiger Aspekt, und das Enthalten vertraulicher Informationen in einem sicheren System ist Papierformularen vorzuziehen, die darauf warten, unterschrieben zu werden. Es ist auch viel mobiler. Nach einer kürzlichen Implementierung teilte mir ein Manager mit, dass es ihm viel Ärger erspart habe, wenn ihm auf Reisen Dinge zum Unterschreiben zugestellt wurden.
Im Auftrag der Personalabteilung: Es lebe der Workflow !!!
quelle