2010-12-01 6 views
20

Ich brauche einen Ratschlag für den besten Ansatz zur Lösung dieses Problems.Ich brauche eine einfache Regel-Engine, denke ich?

Ich habe DROOLS, Java Rule Engine und ein paar andere recherchiert. Alle diese sind mächtig und haben gute Dinge über sie. Ich weiß nicht, welche (wenn überhaupt) die beste Wahl für mich sein wird.

Ich habe ein Geschäftsobjekt. (Vereinfacht für Demo)

Person 
    firstName:String 
    lastName:String 
    departMent:String 
    hireDate:Date 

Ich brauche einen Editor in einer Web-Anwendung zu schreiben, die für komplexe Regeln erlauben wird, um diese Felder gebaut werden. Ich muss komplexe verschachtelte UND/ODER-Logik unterstützen. Ich brauche nur grundlegende Operatoren, und die Regel sollte einfach zu wahr oder falsch auswerten. Wenn die Regel wahr oder falsch ist, wird jeweils eine Aktion ausgeführt.

Zum Beispiel

vorName "Wert" ENTHÄLT UND (nachName GLEICH "input" OP-Abteilung ENTHÄLT "input")

ich gedacht hatte, vielleicht sollte ich meine gerade schreiben eigenen Parser und evaluiere die Logik in meinem eigenen Code. Ich weiß nicht, was zu tun ist, jeder Rat oder Links zu etwas zu lesen wäre sehr dankbar. Gibt es ein bestimmtes Designmuster, das ich erforschen könnte?

Wie würden Sie dieses Problem lösen? Ein Vorbehalt gegenüber den Regel-Engines ist, dass sie vielleicht für ein einfaches Problem zu komplex sind?

+1

Ahh, ich brauche eine Ausdruckssprache. Ich gehe mit http://mvel.codehaus.org/Home – Andy

+0

Hallo, haben Sie easyrules.org ausprobiert? Es kann Ihnen helfen, das zu implementieren, wonach Sie suchen. Hoffe das hilft. Mit freundlichen Grüßen –

Antwort

5

Das ist keine Ja/Nein-Frage, aber ich kann wahrscheinlich meine Erfahrungen teilen und hoffe, dass es hilft. Ich habe DROOLS in einigen Projekten recht erfolgreich eingesetzt. Abgesehen von einigen Fällen (ein anderes Team hatte Probleme mit DROOLS unter starker Belastung), ist DROOLS eine ziemlich nützliche Bibliothek.

ich eine Anwendung gebaut, die:
1. Eingabe von einem auf der Grundlage der Eingabe von einem Satz von verfügbaren Operationen

So trivial, wie es aussieht, die nächste Aktion wählte
2. Quelle lesen benötigt es sehr flexibel zu sein:
1. Die Eingabe war ein variabler Satz von Name-Wert-Paaren, Namen nicht vorbestimmt.
2. Werte, Vorhandensein/Fehlen bestimmter Namen/Werte (basierend auf dem Auftreten/Fehlen von Ereignissen), lösen unterschiedliche Aktionen aus.
3. Die Geschäftsregeln können sich ändern, während die Anwendung ausgeführt wird.

Vielleicht gibt es bessere Lösungen, aber für besser oder schlechter, endete ich mit DROOLS. Ich habe ein BPEL entwickelt, in dem die Entscheidungen von der DROOLS-Komponente getroffen werden. Die DROOLS-Komponente liest die Entscheidungsregeln intern aus einer Microsoft Excel-Tabelle. Es erstellt die Regeln neu, wenn sich die Datei ändert. Jetzt ändern die Domänenexperten diese Tabelle, wenn dies erforderlich ist, und wir gehen nicht durch schmerzhafte Bereitstellungen!

Wenn Sie eine ausgefeilte Benutzeroberfläche wünschen, ist DROOLS Guvnor eine leicht verfügbare Web-Anwendung (mit Rich-UI), die Ihren Domain/Fachexperten dabei hilft, Regeln zu erstellen und sie in einer Datenbank zu speichern.

0

Ich würde vorschlagen, Ihren eigenen Parser. Warum können Sie das Objekt in diesem Zusammenhang nicht serialisieren und AJAX verwenden, um es im Backend zu validieren? Es trennt dann die Validierungslogik von der Benutzeroberfläche.

+0

Ich bin etwas verwirrt, was Sie meinen, indem Sie das Objekt serialisieren. Das Web-Frontend wird einfach die Regel basierend auf den Feldern erstellen. Ich werde die Regeln auf das Backend für alle Objekte "Person" in meiner Datenbank anwenden. – Andy

+0

Die Frage ist offensichtlich nicht das Parsen des Objekts, sondern die beste Methode, Regeln auf diese Objekte anzuwenden. – rds

+0

Als er sagte "Ich hatte gedacht, vielleicht sollte ich einfach meinen eigenen Parser schreiben und die Logik in meinem eigenen Code auswerten." , Ich dachte, er würde die beste Methode finden, die Regeln auf ein Objekt anzuwenden, das am Frontend mit Benutzereingaben erstellt würde. Hab nicht verstanden, dass er die Regeln am Frontend konstruieren wollte. –

0

Ich würde mir einige Beispiel-Regeln-Engine-Schnittstellen ansehen und sehen, welche ich mag. Sie können Web-basierte E-Mail-Regeln Schnittstellen betrachten, um einige Ideen zu bekommen. Wenn Sie wirklich eine einfache Regel-Engine benötigen, müssen Sie nur eine gute Schnittstelle erstellen, und dann können Sie die Regeln mit Javascript an den Server senden.

0

Wahrscheinlich nicht. Sie benötigen ein anständiges Domänenmodell. Nicht eine, wo Ihre Objekte sind nur Datenplatzhalter. Sind Ihre Benutzer wahrscheinlich in der Lage, ein solch komplexes Regelsystem zu verstehen und zu verwenden, und würden diejenigen, die es vorziehen, einfach nur in Java programmieren, wo sie eine geeignete Kapselungs- und Refactoring-Unterstützung haben? Regelsysteme funktionieren nur mit einfachen Regeln auf einer eingeschränkten Domäne, wo Sie Leuten, die nicht als Programmierer ausgebildet sind, erklären können, wie sie gebaut werden. Und vergessen Sie nicht, dass das Erstellen von Regeln nur Programmieren ist, Sie also Versionskontrolle, Tests und keine Globals benötigen.

+0

@Stephen Nicht sicher, dass ich der Aussage zustimme "Regelsysteme funktionieren nur mit einfachen Regeln auf einer eingeschränkten Domäne, wo man Leuten erklären kann, die nicht als Programmierer ausgebildet sind." Sie eignen sich auch für komplexe Regeln, bei denen der Algorithmus nicht einfach ist definiert. Ich habe eine Regel-Engine effektiv verwendet, um ein Netzwerk-Provisioning-Problem zu lösen, das keiner der Experten effektiv erklären konnte (außer natürlich ihrem eigenen Teil). – Bill

+0

Ich muss da widersprechen. Sie sind überhaupt nicht gut für komplexe Regeln. Mangel an Sichtbarkeit, Refactoring, Modularisierung, Geschwindigkeit, Flexibilität sind die häufigsten Probleme, denen ich begegnet bin. Für diejenigen, die ich bevorzuge etwas wie ein Smalltalk-System, wo Sie einfach DSLs erstellen und leistungsstarke Modelle erstellen können. –

1

In der Drools-Dokumentation wird erläutert, wann eine Rules-Engine verwendet werden soll. http://downloads.jboss.com/drools/docs/5.1.1.34858.FINAL/drools-expert/html_single/index.html#d0e181

Aus dem docs ...

Die kürzeste Antwort auf dieser Frage ist „wenn gibt es keinen zufriedenstellenden traditionellen Programmieransatz das Problem zu lösen.“. Angesichts dieser kurzen Antwort ist etwas mehr Erklärung erforderlich.Der Grund, warum gibt es keinen „traditionellen“ Ansatz ist möglicherweise einer der folgende:

- Das Problem ist auch nur traditioneller Code für Geige.

Das Problem kann nicht komplex sein, aber Sie können nicht eine nicht-zerbrechliche Art von eine Lösung für sie zu bauen.

- Das Problem liegt jenseits jeder offensichtlichen algorithmische Lösung.

Es ist ein komplexes Problem zu lösen, gibt es keine offensichtlichen traditionellen Lösungen, oder im Grunde das Problem nicht vollständig verstanden wird.

- Die Logik Änderungen oft

Die Logik selbst auch einfache sein können, aber die Regeln sehr oft ändern. In viele Organisationen Software-Releases sind wenige und weit zwischen und steckbare Regeln können die „Beweglichkeit“ helfen zu liefern, die in eine maßen sichere Weise benötigt wird, und erwartet.

- Domain-Experten (oder Business-Analysten) sind leicht verfügbar, sind aber nichttechnisch.

Domain-Experten besitzen oft einen Reichtum des Wissens über Geschäftsregeln und Prozesse. Sie sind in der Regel nichttechnisch, aber kann sehr logisch sein. Regeln können es ihnen ermöglichen, die Logik in ihren eigenen Bedingungen auszudrücken. Natürlich müssen sie noch kritisch denken und logisch denken können. Viele Menschen in nicht-technischen Positionen haben keine Ausbildung in der formalen Logik, so vorsichtig sein und mit ihnen arbeiten, wie durch betriebswirtschaftliche Kenntnisse in Regeln kodifiziert, werden Sie oft Löcher in aussetzen, wie die Geschäftsregeln und Prozesse derzeit verstanden.

Wenn er nicht verwenden ...

Als Regel Motoren sind dynamisch (dynamic in dem Sinne, dass die Regeln gespeichert und verwaltet werden können und bei Bedarf aktualisiert Daten), werden sie oft sah als Lösung für das Problem der Bereitstellung von Software. (Die meisten IT-Abteilungen scheinen gibt es für den Zweck der Verhinderung Software wird ausgerollt.) Wenn diese ist der Grund, warum Sie wollen eine Regel -Engine verwenden, beachten Sie, dass Regelmotoren funktionieren am besten, wenn Sie in der Lage sind zu schreiben deklarative Regeln. Als Alternative können Sie datengesteuerte Designs (Nachschlagetabellen) oder Skriptverarbeitung Engines, in denen die Skripts verwaltet werden in einer Datenbank und können aktualisiert im laufenden Betrieb sein.

+0

Ich habe das gelesen. Wir werden "Domain Experts" die Regeln erstellen lassen, aber es gibt keine Möglichkeit, Drools-Regeln im Drools-Editor zu schreiben. Diese Leute wollen einen netten Editor, der das praktisch für sie tut und genau auf die Problemdomäne zugeschnitten ist. Ich mag die Idee nicht, meinen eigenen Code zu schreiben, der Drools-Regeln schreibt, und ich schreibe gerne Drools-Regeln. :) – Andy

+0

Sie müssen nicht Nicht-Programmierer Regeln schreiben. Das ist eine Vernunft für eine Regel-Engine, aber es ist völlig in Ordnung, wenn ein Programmierer die Regeln schreibt. Ein flüchtiger Blick auf das, was Sie angegeben haben, deutet eher auf eine nicht auf Regeln basierende Lösung hin. Ein Parser scheint einfacher, Regeln-Engines sind nicht trivial einzurichten. – Bill

+0

Seien Sie sich jedoch bewusst, dass es viel eher gute Ergebnisse bringt, wenn Sie etwas Agilität in das Unternehmen bringen, als wenn Sie eine Regel-Engine einführen, da die IT-Organisation vierteljährlich veröffentlicht. Es ist nicht schwer, eine Organisation zu gründen, die zweimal im Monat erscheint. Und sobald Sie es den Programmierern erlauben, die Regeln zu erstellen, haben Sie effektiv zwei Probleme aus einem erstellt. –

-2

Haben Sie versucht JBehave?

JBehave ist ein Framework für behavior-driven Development (BDD). BDD ist eine Weiterentwicklung von Test-Driven Development (TDD) und Akzeptanz-Test angetriebenen Design, und soll diese Praktiken zugänglicher zu machen und intuitiv für Neulinge und Experten gleichermaßen. Es verschiebt das Vokabular von testbasiert zu verhaltensbasiert und positioniert sich als Designphilosophie.

+0

Nein, ich werde es googlen. Danke – Andy

+0

Wie soll ein Test-Framework zur Implementierung von Geschäftsregeln beitragen? Meinst du, er kann die Testdefinitions-Engine ausreißen und sie wiederverwenden, um die Regeln zu implementieren? – flup

+0

Nicht sicher, ob diese Antwort für die obige Frage bestimmt ist – Manu

0

Wäre Jython nicht nützlich?

Jeder Ausdruck/eine komplexe Regel könnte der Körper einer Funktion sein. So stellt der Benutzer den Körper zur Verfügung, und Ihr Code legt die Funktionsspezifikation darum und führt sie dann aus.

Sie können auch eigene Java-Objekte/Variablen in den jython-Kontext einfügen, der in Ihrem Skript/Funktionskörper verwendet werden soll.

Dann haben Sie eine standardisierte, erweiterbare und häufig verwendete Sprache zur Hand. Aber ich denke, der Jython-Editor könnte eine Herausforderung sein.

Verwandte Themen