Wie wirkt sich die Verwendung einer Regelengine auf das Design, die Implementierung und die Leistung einer Anwendung aus?


11

Ich interessiere mich für die Fähigkeit von Regel-Engines:

  • Starten und iterieren Sie über geschäftsgesteuerte Logik
  • Lassen Sie "Geschäftsbenutzer" die eigentliche Änderung dieser Regeln durchführen und nicht Entwickler
  • die Geschäftsregeln im Allgemeinen verstehen

Beeinträchtigt die Verwendung einer Regelengine auch die Qualität einer Anwendung?

Ändert sich die Verwendung einer Regelengine, wenn Sie auf einem 1-Computer-Setup im Vergleich zu Ihrer Architektur im Vergleich zu einer mehrschichtigen Cloud-basierten verteilten Architektur mit Tausenden von Computern bereitstellen? Wie wäre es anders?

Antworten:


5

Die Entscheidung, ob eine Schnittstelle für nicht technisches Personal zur Änderung von Geschäftsregeln verfügbar gemacht werden soll, hängt weitgehend von mehreren Faktoren ab, einschließlich der Projektziele, der Projektkosten, der Projektlaufzeit und des Verhältnisses von Bekannten zu Unbekannten in der EU Projekt.

Wenn ich zum Beispiel glaubte, dass niemand die Regelschnittstelle verwenden würde, würde ich mich wahrscheinlich gegen die Implementierung entscheiden. Wenn ich jedoch Grund zu der Annahme hätte, dass Änderungen häufig sind und unterschiedliche Endbenutzer unterschiedliche Regeln erwarten würden, würde ich in Betracht ziehen, an der Erstellung solcher Funktionen zu arbeiten.

Ich habe mich für ein Projekt entschieden, und es dauerte Jahre, bis die Funktion jemals weit verbreitet war. Ich vermutete, dass wir irgendwann Endbenutzer haben würden, die die Dinge selbst anpassen möchten, also haben wir diese Funktionalität in Teilen implementiert.

Es begann als etwas, das nur bestimmte Leute, wie Entwickler oder Administratoren, verwenden konnten. Die Benutzeroberfläche war klobig, aber verwendbar, wenn Sie wussten, was Sie taten. Als sich das Produkt jedoch der Fertigstellung näherte, erwies sich die Backend-Logik der Regelengine als nützlich, und unser Designteam gab ihr eine schöne, kundenorientierte Benutzeroberfläche.

Wenn ich es anders machen würde, könnte ich eine andere Datenbankarchitektur wählen, nur weil die Lernkurve hoch ist. Kurz gesagt, die frühzeitige Erstellung führte später zu vielen kundenorientierten Funktionen, ohne dass Sie erneut in den Code zurückkehren und ihn so umgestalten mussten, dass alle dynamischen Regeln enthalten waren.


1
Ich möchte hinzufügen, dass Geschäftsbenutzer damit rechnen sollten, Zeit mit dem Erlernen der Regeloberfläche zu verbringen. Die Benutzeroberfläche wird für Benutzer einfacher zu verwenden sein, aber das Erlernen wird definitiv Zeit und Mühe kosten. Sie sollten nichts magisch Verständliches erwarten.
9000

@ 9000 - Sehr guter Punkt. Ich habe das in meinen eigenen Projekten gesehen. Tatsächlich beinhaltet es oft noch Schulungen, um die Benutzer auf den neuesten Stand zu bringen, sowie einen bestimmten Aspekt des "Verkaufens" der Benutzeroberfläche an die Benutzer und des Zeigens des Werts, den sie für sie hat.
jmort253

4

Wenn ich dies tun würde, würde ich eine domänenspezifische Sprache erstellen, um die Regeln auszudrücken, und den Geschäftstypen möglicherweise eine Benutzeroberfläche geben, um sie auf Anfrage zu ändern. Verwenden Sie dann eine funktionale Sprache (wie Haskell, Lisp oder Erlang), um die Regeln zu bewerten.

Wenn massive Parallelität erforderlich wäre, würde ich mich für Erlang entscheiden, das Parallelität sehr gut macht. Die Verwendung von Erlang lässt sich gut von 1 Knoten auf 100 oder mehr skalieren.

Wenn Sie sich die Regeln als eine Algebra vorstellen, die auf ein Dataset angewendet wird, ist es viel einfacher, die Anforderungen in Ihrem Code zu logisieren und sich selbst (oder Ihren Managern) zu beweisen, dass sie korrekt sind. Dies ist einer der Orte, an denen eine funktionale Sprache zu Ihren Gunsten funktioniert.


3

Ich habe eine Anwendung geschrieben, die auf WF (Windows Workflow Foundation) basiert. Mein Chef (ein DBA) war überzeugt, dass WF Multithreading durchführen kann, ohne dass Parallelität geplant werden muss. Das Gedächtnis war gründlich geteilt, aber es gab so viele Probleme, dass ich es nicht in nur wenigen Absätzen erklären kann, und es hängt nur geringfügig mit Ihrer Frage zusammen ... also fahre ich fort.

Fähigkeit, BL zu iterieren:
WF macht das gut.
Erlauben Sie Nontechies, "eine App zu erstellen":
WF macht das gut, WENN die Architektur funktioniert UND Nontechies technische Einschränkungen verstehen ... Unsere haben es nicht getan.
Fähigkeit, Geschäftsregeln im Allgemeinen zu verstehen:
Es gibt einige Add-Ins, die einige grundlegende Aufgaben ausführen können, ähnlich wie Sharepoint Workflows automatisieren kann. Ich bin nicht auf diese Dinge eingegangen.
Qualität von Software-Versionen:
Mittelmäßig. WF hat für unsere Zwecke keine gute Leistung erbracht, aber das System war schlecht konstruiert und meine Hände waren gebunden.
Geschwindigkeit der Bewerbungen:
Schleppend. Die Lernkurve ist für Entwickler und Endbenutzer gleichermaßen ziemlich steil. Die Art und Weise, wie WF-Speicher (App-Domains, wenn ich mich recht erinnere) die Thread-übergreifende Kommunikation, Mutexe und andere Threading-Konzepte kludgy machte oder einfach überhaupt nicht funktionierte.

Letztendlich habe ich einen Prototyp geschrieben, um zu beweisen, dass WF bei der Implementierung versagt. Ich habe es durch gewöhnliches Multithreading ersetzt. Leistung und Lesbarkeit des Codes wurden verbessert. Nehmen Sie dies mit einem Körnchen Salz, da dies meine erste professionelle WF-Anwendung war.

Nontechs können glauben, dass praktisch alles möglich ist, ohne dass ein Programmierer erforderlich ist. Dies ist ein potenziell großer Nachteil für den gesamten "Dummy Down" von BL. Soziologische Probleme im Zusammenhang damit töteten das Projekt.

Wenn ich zurückgehen und es auf meine Weise tun könnte : Verwenden Sie traditionelles Gewinde und das BL-Formteil, das über das Dekorationsmuster erzielt wird . Ich habe einen Proof of Concept geschrieben, der diese Technologien verwendet und gut funktioniert hat. UND das BL-Mapping sollte in eine EINFACHE Benutzeroberfläche eingebunden werden.
Update
Ich habe einen alten Beitrag gefunden, den ich bei der Bearbeitung von Parallelitätsproblemen geschrieben habe. Der Code zeigt, wie das Drucken von "Hallo Welt" in parallelen Workflows nicht funktioniert, ohne zu verstehen, was unter den Deckblättern vor sich geht (was den gesamten Zweck der WF-Abstraktion zunichte macht). Der MSDN-Moderator erklärt einen allgemeinen Überblick darüber, wie parallele Aktivitäten wirklich sequentiell sind. Er schließt mit "Sie müssen das gesamte Handbuch lesen", um etwas so Grundlegendes zu tun. http://social.msdn.microsoft.com/Forums/de/windowsworkflowfoundation/thread/8a1fa165-ad5c-4cd2-b489-7ea5fc31fed8

Viel Glück.


Ich habe keine Erfahrung mit WF, habe mich aber immer davon ferngehalten, weil mein Bauchgefühl das war. Aber ich frage mich, ob WinWF nicht nur eine verzögerte Version eines ETL-Systems wie Rhino ETL ist, was mit der gleichen Leichtigkeit damit gemacht werden kann.
Henrik

3

Ich habe eine weniger als perfekte Erfahrung mit der Verbindung von Java-Code zu einer Oracle-Regel-Engine. Einiges davon mag auf Unerfahrenheit der Regelautoren zurückzuführen sein, aber das ist es, womit ich konfrontiert war.

  • Wir haben unsere Regelengine als zustandsloses Gerät implementiert. Der Anrufer musste alle Parameter erfassen und zur Auswertung an die Engine weitergeben. Dies bedeutete, dass, wenn die Regel ein anderes Datenfeld benötigte, alle Clients aktualisiert werden mussten. Dies negierte den angepriesenen Vorteil, die Regeln unabhängig von ihren Verbrauchern aktualisieren zu können.
  • Die Engine hat eine SOAP-WSDL veröffentlicht, die jedoch automatisch aus dem Regelsatz generiert wurde. Kleinere Änderungen der Regeln würden den Vertrag mit den Verbrauchern brechen.
  • Der Motor war gut darin, die Regeln zu bewerten, aber schrecklich darin, uns zu sagen, warum die Bewertung fehlgeschlagen ist. Es war schwierig, informative Fehlermeldungen an den Benutzer zurückzugeben.
  • Die WSDL war nicht für den allgemeinen Verbrauch geeignet. Der einfachste Regelsatz hatte eine 14-seitige WSDL, die die Interna der Regelbasis verfügbar machte. Wir mussten eine SOA-Übersetzungsebene vorlegen, um eine geschäftsfreundliche Fassade zu präsentieren. Anstatt eine 100% zuverlässige lokale Bibliothek aufzurufen, befanden sich zwei zusätzliche Server in der Schleife. Das trägt nicht im geringsten zur Zuverlässigkeit bei. Zu jeder Änderung der Regelsignatur gehörten außerdem drei unterschiedliche Teams, die den Code aktualisierten. Nicht meine Definition von Agilität!
  • Jedes Mal, wenn der Regelsatz Ergänzungen benötigte, musste die WSDL aktualisiert werden, was bedeutete, dass Clients sie nicht mehr verstanden. Dies führte dazu, dass neue SOAP-Endpunkte für Version 2, Version 3 hinzugefügt wurden. Dies hatte Auswirkungen darauf, dass die Firewall-Regeln aktualisiert werden mussten.
  • Die Regeln wurden in "strukturiertem Englisch" ausgedrückt, was für einfache Regeln leicht verständlich war, für komplexe Regeln jedoch nahezu undurchsichtig.
  • Wir konnten niemals Auftragnehmer finden, die die Regeln für die Autorensprache kannten.
  • Die Regelsprache hat keine Arrays, Rekursionen oder Objektorientierungen implementiert. In einem Fall war die einzige Möglichkeit, eine Regel zu implementieren, die Beschriftung einer Excel-Tabelle, in der die Regel in VB implementiert wurde. Warum die Mühe?

Ich denke nicht, dass die Wahl, eine Regel-Engine zu verwenden (oder nicht), eindeutig ist. Ich schlage vor, dass Sie einen Prototyp eines Motors erstellen, den Sie verwenden möchten, und dann eine fundierte Entscheidung treffen. Sie sind sicherlich keine Silberkugel ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.