Ich bin verantwortlich für ein Entwicklerteam, das im Begriff ist, mit der Entwicklung eines Systems für leichte Versicherungsansprüche zu beginnen. Das System umfasst viele manuelle Aufgaben und Geschäftsabläufe, und wir möchten Windows Workflow (.NET 4.0) verwenden.
Ein Beispiel für die Geschäftsdomäne lautet wie folgt: Ein Versicherungsnehmer ruft das Contact Center an, um einen Anspruch geltend zu machen. Dieses „Ereignis“ löst zwei Unteraufgaben aus, die manuell parallel ausgeführt werden und deren Ausführung lange dauern kann.
- Kunden auf Betrug prüfen - Ein manueller Prozess, bei dem ein Betreiber verschiedene Kreditunternehmen anruft, um das Potenzial eines betrügerischen Kunden zu prüfen und zu bewerten. Von hier aus kann die Unteraufgabe eine Reihe von Unterstatus eingeben (Check in Progress, Fehlgeschlagene Referenzprüfung, Bestehende Referenzprüfung usw.).
- Artikel an Reparaturzentrum senden - Ein manueller Vorgang, bei dem der Artikel, für den der Versicherungsnehmer den Anspruch geltend gemacht hat, an das zu reparierende Reparaturzentrum gesendet wird. Von hier aus kann die Unteraufgabe eine Reihe von Unterstatus eingeben (Warten auf Reparatur, In Bearbeitung, Repariert, Gepostet usw.). Der Anspruch kann erst fortgesetzt werden, wenn der Status jeder Unteraufgabe einen vordefinierten Status erreicht hat (basierend auf den Geschäftsregeln).
An der Oberfläche scheint Workflow tatsächlich die beste Wahl für die Technologie zu sein. Ich habe jedoch einige Bedenken hinsichtlich der Verwendung von WF 4.0.
- Fähigkeiten - Wenn ich mir die durchschnittlichen Fähigkeiten der Entwickler anschaue, sehe ich nicht viele Entwickler, die den Workflow verstehen oder kennen.
- Wartbarkeit - Es scheint innerhalb der Community wenig Unterstützung für WF 4.0-Projekte zu geben, und dies in Verbindung mit dem Mangel an Fähigkeiten wirft Bedenken hinsichtlich der Wartbarkeit auf.
- Eintrittsbarriere - Ich habe das Gefühl, dass Windows Workflow eine steile Lernkurve aufweist und nicht immer so einfach zu erlernen ist.
- Neues Produkt - Da Workflow für .NET 4.0 vollständig neu geschrieben wurde, sehe ich das Produkt als Produkt der ersten Generation und möglicherweise nicht über die erforderliche Stabilität.
- Reputation - Frühere Versionen von Workflow wurden nicht gut aufgenommen, als schwierig zu entwickeln angesehen und führten zu einer schlechten Geschäftsaufnahme.
Meine Frage ist also, ob wir für diese Situation Windows Workflow (WF) 4.0 verwenden sollen oder ob es eine alternative Technologie (z. B. Simple State Machine usw.) oder sogar eine bessere Workflow-Engine gibt.
Antworten:
Ich habe mehrere WF4-Projekte durchgeführt. Lassen Sie uns also sehen, ob ich den anderen Antworten nützliche Informationen hinzufügen kann.
Aus der Beschreibung Ihres Geschäftsproblems geht hervor, dass WF4 gut zusammenpasst, also keine Probleme.
In Bezug auf Ihre Bedenken haben Sie Recht. Grundsätzlich ist WF4 ein neues Produkt, dem einige wichtige Merkmale fehlen und das einige Ecken und Kanten aufweist. Es gibt eine Lernkurve, man muss einige Dinge anders machen. Der Hauptpunkt ist die lange Laufzeit und die Serialisierung, was der durchschnittliche Entwickler nicht gewohnt ist und einige Überlegungen erfordert, um richtig zu werden, da ich viel zu oft höre, dass Menschen Probleme haben, den Kontext eines Entity-Framework-Daten zu serialisieren.
Die Verwendung von Workflowdiensten, die in IIS / WAS gehostet werden, ist meistens die beste Methode, um diese lang laufenden Workflows auszuführen. Das macht das Lösen des Versionsproblems auch nicht zu schwierig. Lassen Sie einfach die erste Nachricht die Workflow-Version zurückgeben und machen Sie dies zu einem Teil jeder nachfolgenden Nachricht. Als nächstes setzen Sie den WCF-Router dazwischen, der die Nachricht basierend auf der Version an den richtigen Endpunkt weiterleitet. Das Grundlegende ist, niemals einen vorhandenen Workflow zu ändern, sondern immer einen neuen zu erstellen.
Was rate ich Ihnen? Machen Sie kein großes Risiko mit einem unbekannten und für Sie unbewiesenen Stück Technologie. Machen Sie mit WF4 einen kleinen, unkritischen Teil der Anwendung. Auf diese Weise können Sie es erweitern, wenn es funktioniert. Wenn es jedoch fehlschlägt, können Sie es herausreißen und durch traditionelleren .NET-Code ersetzen. Auf diese Weise erhalten Sie echte Erfahrungen mit WF4, anstatt sich auf Informationen aus zweiter Hand stützen zu müssen, und lernen dabei eine neue und leistungsstarke Technologie. Wenn möglich, nehmen Sie an einem Kurs über WF4 teil, da Sie dadurch viel Zeit sparen, um sich auf den neuesten Stand zu bringen (schamloser Selbststecker hier ).
Über die Simple State Machine. Ich habe es nicht benutzt, aber ich hatte den Eindruck, es sei für kurze Zeit im Speicher Zustandsautomaten. Einer der Hauptvorteile von WF4 sind die langfristigen Aspekte.
quelle
Ich bin ein paar Mal in dieses Dilemma gekommen und hatte mich entschieden, die Workflow-Grundlage nicht zu verwenden. Einige Überlegungen (ähnlich wie bei Ihnen) waren
Wenn ich nach 13 bis 14 Monaten zurückblicke, denke ich immer noch, dass die Entscheidung, WF nicht zu verwenden, richtig war. IMO, WF ist sinnvoll, wenn es sehr wahrscheinlich ist, dass sich der Arbeitsablauf und / oder die Geschäftsregeln ändern können. Mit WF können Sie den Workflow in einer separaten Datei isolieren, sodass die Konfiguration durch Benutzer einfacher ist.
quelle
Wir haben WF 4.0 in den letzten Monaten verwendet. Ich muss sagen, dass es schwierig ist, den Workflow so zu denken. Ich kann Ihnen jedoch sagen, dass es sich lohnt. Wir wussten sehr wenig, als wir anfingen. Wir haben ein Anfänger- und Profibuch für WF 4.0 gekauft, das geholfen hat. Ich selbst habe viele Videos online gesehen und bin PDC 2009 gefolgt, um die neuesten Nachrichten über WF 4.0 zu erhalten und zu erfahren, wie es sich von den vorherigen, etwas blöden Versionen unterscheidet. Eine wichtige Sache, für die wir eine Lösung vorschlagen mussten, ist die Art und Weise, wie wir mit In / Our Arguments in einem Workflow umgehen können, ohne unsere benutzerdefinierten Aktivitäten auf bestimmte Datentypen zu beschränken und wie Parameter zwischen Aktivitäten übergeben werden. Ich habe eine gute Lösung dafür gefunden, und die Workflow-Erfahrung, die wir bisher haben, ist überhaupt nicht schlecht. Tatsächlich, Wir haben eine Workflow-intensive Anwendung, die immer größer wird, und ich kann mir wirklich nicht vorstellen, sie in einer anderen Umgebung zu lösen. Ich liebe den visuellen Effekt, den es hat: Es hält mich von den Details der Konstruktionen von if / else usw. fern und macht die Geschäftsregeln so sichtbar, dass Sie nicht gezwungen sind, in Codezeilen einzutauchen, um zu wissen, was los ist oder wie man einen Fehler behebt. Das Projekt, an dem wir gearbeitet haben, ist übrigens dem von Ihnen beschriebenen sehr ähnlich und es ist ein mittelgroßes Projekt. Sie können meinen Worten entnehmen, dass es mir gefällt, und ich empfehle es, obwohl es einige Risiken birgt, da es sich um eine neue Technologie handelt und Sie einige innovative Ideen einbringen müssen. Es hält mich von den Details der Konstrukte von if / else usw. fern und macht die Geschäftsregeln so sichtbar, dass Sie nicht gezwungen sind, in Codezeilen einzutauchen, um zu wissen, was los ist oder wie ein Fehler behoben werden kann. Das Projekt, an dem wir gearbeitet haben, ist übrigens dem von Ihnen beschriebenen sehr ähnlich und es ist ein mittelgroßes Projekt. Sie können meinen Worten entnehmen, dass es mir gefällt, und ich empfehle es, obwohl es einige Risiken birgt, da es sich um eine neue Technologie handelt und Sie einige innovative Ideen einbringen müssen. Es hält mich von den Details der Konstrukte von if / else usw. fern und macht die Geschäftsregeln so sichtbar, dass Sie nicht gezwungen sind, in Codezeilen einzutauchen, um zu wissen, was los ist oder wie ein Fehler behoben werden kann. Das Projekt, an dem wir gearbeitet haben, ist übrigens dem von Ihnen beschriebenen sehr ähnlich und es ist ein mittelgroßes Projekt. Sie können meinen Worten entnehmen, dass es mir gefällt, und ich empfehle es, obwohl es einige Risiken birgt, da es sich um eine neue Technologie handelt und Sie einige innovative Ideen einbringen müssen.
meine 2 Cent ...
quelle
Ich habe drei Projekte in WF 3.5 gemacht und ich muss sagen, dass es nicht einfach ist. Es zwingt Sie dazu, ganz neu zu denken, besonders wenn Ausdauer verwendet wird. Das Aktualisieren der Anwendung, die Hunderte unvollständiger, dauerhafter Workflows enthält, ist eine Herausforderung. Eine einzige Änderung in der Serialisierung bringt alle zum Absturz. Es ist üblich, mehrere Versionen derselben Bibliothek einzuführen, um neue und alte laufende Workflows zu unterstützen. Es war eine Herausforderung.
Ich habe WF 4.0 noch nicht ausprobiert, aber aufgrund der Erfahrungen mit BizTalk und WF 3.5 denke ich, dass es ähnlich sein wird.
Der beste Ansatz, den Sie wählen können, ist Proof-of-Concept. Nehmen Sie einzelne WF aus Ihren Anforderungen und versuchen Sie, sie in WF 4.0 zu implementieren. Sie werden einige Zeit damit verbringen, aber Sie werden beweisen, ob Sie dies in WF 4.0 können und ob es sichtbare Vorteile gibt.
Wenn Sie sich für WF 4.0 entscheiden, bestehe ich darauf, dass Sie die Möglichkeit prüfen, WF als in Windows AppFabric gehosteten WCF-Dienst auszuführen. AppFabric bietet einige sofort einsatzbereite Funktionen zum Hosten von WFs.
quelle
Ich denke, es ist heute nicht wirklich sinnvoll, über Workflow in WF4 als Technologiewahl für diese Art von Problem zu sprechen. Was wirklich angemessen ist, wie oben von Ladislav Mrnka erwähnt, sind WCF WF Services, die in AppFabric gehostet werden.
Meine Erfahrung damit ist, dass es sich auszahlt und sehr erfreulich ist, aber am Anfang treten Probleme auf, weil es nicht richtig eingeschätzt wird, dass dies für viele Programmierer eher ein Methodenwechsel als ein Technologiewandel ist. Auf der anderen Seite sahen Generalisten und diejenigen mit einer Einstellung zur Problemlösung WCF WF AppFabric als eine Reihe aufregender Möglichkeiten. Wenn also die Mischung der Leute im Projekt ziemlich konservative C # -Entwickler sind, die an ihre täglichen OO- und Muster gebunden sind, wird es schwierig sein, sie vorzustellen. Wenn das Team innovativer ist, wird die Einführung viel einfacher, da sich das Potenzial und die neuen Türen mit jeder Entdeckung vervielfachen.
Zwei konzeptionelle Hauptprobleme, die Programmierer bei der Umstellung auf diese Technologie hatten, waren: a) Nachrichtenkorrelation und Nachrichtenaustauschmuster b) Workflows und Unit-Tests In Standardsystemen in C # ist beispielsweise ein Workflow selten explizit und daher selten Unit-getestet. Der gesamte Workflow bleibt zum Testen durch Akzeptanzszenarien oder Integration übrig. Führen Sie eine explizite WF als Software-Artefakt ein, und plötzlich möchten Standardentwickler versuchen, sie einem Unit-Test zu unterziehen, was sich normalerweise nicht lohnt.
Der Nachrichtenkorrelationsaspekt ist für diejenigen, die mit Nachrichtenaustauschmustern nicht vertraut sind, ein wenig Umdenken. Die meisten Entwickler haben sich mit Prozess- und Remote-Anrufen, Webdiensten und SOAP befasst und sich in der Regel auf ein oder zwei davon konzentriert. Vor allem zu abstrahieren und mit einem allgemeinen nachrichtenbasierten System zu arbeiten, kann zunächst verwirrend sein.
Positiv zu vermerken ist jedoch, dass das Endergebnis viel Zeit spart und viele Möglichkeiten schafft. Eine Hauptsache ist, dass das Worfklow, wenn es visuell klar ist, von Endbenutzer, Entwickler und Analyst gemeinsam bearbeitet werden kann, wodurch unnötige Schritte im Entwicklungslebenszyklus vermieden und die Parteien auf ein Artefakt konzentriert werden. Darüber hinaus werden Funktionsinseln in dedizierten Apps mit dedizierten Klebeschichten entmutigt, indem eine Reihe von Geschäftsprozessen in WF pro Geschäftsdomäne gefördert werden. Mit AppFabric erledigen Sie außerdem die Installation für die Persistenz, Protokollierung und das Aufwecken geplanter Aktivitäten für Sie. Die WF4-Leistung ist ebenfalls hervorragend.
Meine Empfehlung wäre, das innovativste oder explorativste Teammitglied zu finden, das das erste Scouting durchführt, um die kniffligen Teile zu entdecken, die Kernfunktionen zum Laufen zu bringen und diese anfängliche Person für die Unterteilung der verbleibenden Arbeit verantwortlich zu machen.
quelle
Um ein Versicherungsanspruchssystem von beliebiger Komplexität zu erstellen, das Rollen und "Unteraufgaben" umfasst, benötigen Sie wirklich eine BPM-Lösung, nicht nur einen Workflow. Workflow Foundation 4.0 ist schick, kommt aber den Funktionen eines BPM-Produkts nicht wirklich nahe.
BPM-Lösungen wie Metastorm BPM, Global360 und K2.NET bieten menschenzentrierte Arbeitsabläufe, Aufgaben, Rollen und Systemintegration, mit denen Geschäftsprozesse wie Ihr Versicherungsanspruchssystem modelliert und optimiert werden können. Verwenden Sie ASP.NET, um die Schnittstelle zu erstellen, die in die BPM-Workflow-Engine integriert ist, da die integrierten Designer normalerweise eingeschränkt sind und Sie gezwungen sind, das benutzerdefinierte Websteuerelement zu verwenden, das normalerweise nicht so umfassend ist wie die ASP.NET-Websteuerelemente.
quelle
Entscheiden Sie sich für die Technologie, die Ihr Team kennt und mit der Sie sich wohl fühlen. Workflow Foundation ist kein Produkt, das Sie sofort verwenden können. Es handelt sich vielmehr um eine Reihe von Elementen, die Sie in Ihre Anwendung einbetten können, um ein Workflow-System zu erstellen. IMHO ist die Workflow-Logik die am wenigsten wichtige Technologie. Zunächst müssen Sie sich auf die GUI konzentrieren, da Geschäftsinhaber nur die GUI sehen. Wenn Ihr System jedoch erfolgreich ist, müssen Sie auf unendliche Änderungsanforderungen und neue Anforderungen vorbereitet sein, damit Sie Ihre Geschäftslogik so implementieren können, dass sie leicht geändert und in separate Prozesse unterteilt werden kann, um den unterschiedlichen Benutzeranforderungen gerecht zu werden (manchmal widersprüchlich). . BPM hilft bei dieser Aufgabe, da Sie separate, mehrere Versionen von Geschäftsprozessen haben können, die für verschiedene Geschäftsanforderungen geeignet sind. Du ziehst nicht Dafür benötigen Sie keine vollwertige BPM-Engine, aber es ist nützlich, Ihre Geschäftslogik so zu codieren, dass sie versioniert und in einzelne Geschäftsprozesse unterteilt werden kann man kann verstehen. Dafür gibt es viele Ideen - Zustandsautomaten, DSLs (domänenspezifische Sprachen), Skripte usw. - Sie entscheiden, wie die Implementierung aussehen soll. Sie sollten jedoch immer in Geschäftsprozessen denken und Ihre Logik entsprechend organisieren, damit sie diese Prozesse widerspiegelt. Und seien Sie auf die Koexistenz vieler Varianten von Geschäftslogik und Datenstrukturen vorbereitet - dies ist imho die schwierigste Entwurfsaufgabe. Es ist nützlich, Ihre Geschäftslogik so zu codieren, dass sie versioniert und in einzelne Geschäftsprozesse unterteilt werden kann. Das Schlimmste ist ein nicht wartbarer und verschränkter Code-Blob, der "alles" handhabt und den niemand verstehen kann. Dafür gibt es viele Ideen - Zustandsautomaten, DSLs (domänenspezifische Sprachen), Skripte usw. - Sie entscheiden, wie die Implementierung aussehen soll. Sie sollten jedoch immer in Geschäftsprozessen denken und Ihre Logik entsprechend organisieren, damit sie diese Prozesse widerspiegelt. Und seien Sie auf die Koexistenz vieler Varianten von Geschäftslogik und Datenstrukturen vorbereitet - dies ist imho die schwierigste Entwurfsaufgabe. Es ist nützlich, Ihre Geschäftslogik so zu codieren, dass sie versioniert und in einzelne Geschäftsprozesse unterteilt werden kann. Das Schlimmste ist ein nicht wartbarer und verschränkter Code-Blob, der "alles" handhabt und den niemand verstehen kann. Dafür gibt es viele Ideen - Zustandsautomaten, DSLs (domänenspezifische Sprachen), Skripte usw. - Sie entscheiden, wie die Implementierung aussehen soll. Sie sollten jedoch immer in Geschäftsprozessen denken und Ihre Logik entsprechend organisieren, damit sie diese Prozesse widerspiegelt. Und seien Sie auf die Koexistenz vieler Varianten von Geschäftslogik und Datenstrukturen vorbereitet - dies ist imho die schwierigste Entwurfsaufgabe. DSLs (domänenspezifische Sprachen), Skripte usw. - Sie entscheiden, wie die Implementierung erfolgen soll. Sie sollten jedoch immer in Geschäftsprozessen denken und Ihre Logik entsprechend organisieren, damit sie diese Prozesse widerspiegelt. Und seien Sie auf die Koexistenz vieler Varianten von Geschäftslogik und Datenstrukturen vorbereitet - dies ist imho die schwierigste Entwurfsaufgabe. DSLs (domänenspezifische Sprachen), Skripte usw. - Sie entscheiden, wie die Implementierung erfolgen soll. Sie sollten jedoch immer in Geschäftsprozessen denken und Ihre Logik entsprechend organisieren, damit sie diese Prozesse widerspiegelt. Und seien Sie auf die Koexistenz vieler Varianten von Geschäftslogik und Datenstrukturen vorbereitet - dies ist imho die schwierigste Entwurfsaufgabe.
quelle
Ich bin in einer Situation, in der ich 4.0 verwenden muss, da .NET 4.5 noch nicht für die Verwendung in unserer Produktumgebung akkreditiert ist. Ich hatte allgemein große Probleme damit, langfristige Workflows für unsere geschäftlichen Anforderungen zu entwickeln, fand aber schließlich eine elegante Lösung. Es ist nicht etwas, das nur jeder, der später zur Unterstützung kommt, mit Leichtigkeit lernen kann, weil es so viel zu überlegen gibt, aber ich glaube an WF als Werkzeug zum Verwalten von Workflow-Zuständen.
Eine große Sache, die ich mit WF 4.0 in Frage stelle, ist Maurice 'Kommentar:
Das ist großartig, wenn Sie nur eine neue Version möchten, aber was ist, wenn Sie 50.000 dauerhafte Workflows haben und irgendwann feststellen, dass es einen Fehler im Workflow gibt? Sie müssen in der Lage sein, das xamlx zu aktualisieren und dennoch mit den vorhandenen Instanzen gekoppelt zu sein. Ich habe versucht, die verschiedenen Metadatenspalten in der SQL Server-Instanztabelle zu entpacken, um etwas zu finden, das die Instanz ohne Glück mit der Workflow-Definition verknüpft.
Ich habe eine Synchronisationsanwendung zum Importieren von Daten von einem alten System in unser neues WF 4.0-gesteuertes System geschrieben. Grundsätzlich laden wir die Daten in das System und führen dann den Prozess aus, bei dem automatisch die Workflow-Schritte aufgerufen und Validierungsmethoden aufgerufen werden, wobei im Wesentlichen die Benutzerinteraktion verspottet wird. Dies funktionierte bei uns aufgrund der Architektur, die wir für den Zugriff auf den Workflow-Service-Host implementiert haben, nur sehr gut. Es eignet sich hervorragend als Einzelfall, bei dem Sie nach dem Ausführen Überprüfungen durchführen können, um die Konsistenz des Datenmigrationsprozesses sicherzustellen. Die Verwendung dieses Ansatzes für potenziell Hunderttausende von Fällen, sobald ein System aktiv ist, ist jedoch kein wirklicher Ansatz Das schafft Vertrauen und überlastet den Integrationsprozess durch einfache Fehlerkorrekturen.
Meine Empfehlung ist, dass Sie WF 4.0 ganz vermeiden und direkt zu 4.5 übergehen, wenn Ihre Umgebung dies unterstützt. Die dynamischen Updates und die Side-by-Side-Versionierung ermöglichen eine sofortige Fehlerbehebung und WF-Versionierung. Ich muss noch genau untersuchen, wie 4.5 noch nicht für die Verwendung durch unseren Kunden akkreditiert ist, aber ich bin gespannt auf diese Gelegenheit.
Ich hoffe verzweifelt, dass unser Client keine Änderungen an Richtlinien (und damit Anpassungen des Workflows) anfordert und dass die aktuellen Workflows fehlerfrei funktionieren. Letzteres ist eine vergebliche und leere Hoffnung, da immer wieder Fehler auftauchen.
Ich kann wirklich nicht verstehen, was dem WF-Entwicklerteam durch den Kopf ging, um ein System freizugeben, bei dem man Fehler nicht einfach beheben kann. Sie sollten eine Technik zum erneuten Binden einer Instanz an neues xamlx entwickelt haben.
quelle