Ich brauche eine einfache Regel-Engine, glaube ich? [geschlossen]
-
29-09-2019 - |
Frage
Ich brauche ein paar Ratschläge über den besten Ansatz zur Lösung dieses Problems.
Ich habe recherchiert geifert, Java Rule Engine und ein paar andere. All dies sind leistungsstark und haben gute Dinge über sie. Ich weiß nicht, welche (falls vorhanden) wird die beste Wahl für mich sein.
habe ich ein Business-Objekt. (Für Demo vereinfacht)
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 diese Felder gebaut um werden. Ich brauche komplex verschachtelte UND / ODER-Logik zu unterstützen. Ich brauche nur die Grundrechenarten, und die Regel sollte einfach bewerten, um wahr oder falsch. Wenn die Regel auswertet, um wahr oder falsch, eine Aktion tritt auf.
Beispiel:
vorName ENTHÄLT „Wert“ und (NachName GLEICH „input“ OP-Abteilung ENTHÄLT "input")
Ich hatte gedacht, vielleicht sollte ich nur meine eigenen Parser schreiben und die Logik in meinem eigenen Code zu bewerten. Ich weiß nicht, was zu tun ist, eine Beratung oder Links zu etwas zu lesen wäre sehr geschätzt. Gibt es eine spezielle Design-Muster I Forschung könnte?
Wie würden Sie dieses Problem lösen? Ein Vorbehalt gegen die Regeln Motoren ist, dass sie vielleicht zu komplex sind, um nur ein einfaches Problem?
Lösung
Dies ist nicht ein Ja / Nein-Frage, aber ich kann meine Erfahrungen wahrscheinlich teilen und hofft, dass es hilft. Ich habe drools recht erfolgreich in einigen Projekten eingesetzt. Abgesehen von einigen Fällen (ein anderes Team hatte Probleme mit drools unter hohen Last) drools ist eine recht nützliche Bibliothek.
Ich baute eine Anwendung, die:
1. Leseeingang von einer Quelle
2. Die nächste Aktion wählt aus einer Reihe von verfügbaren Operationen auf der Grundlage der eingegebenen
Wie trivial, wie es aussieht, ist es erforderlich, sehr flexibel sein:
1. Die Eingabe ein variablen Satz von Name-Wert-Paar war, Name nicht vorbestimmt.
2. Werte, An- / Abwesenheit bestimmter Name / Werte (bezogen auf das Auftreten / Fehlen von Ereignissen), Trigger verschiedene Aktionen.
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, landete ich drools zu verbrauchen. Ich entwickelte eine BPEL, in denen die Entscheidungen der drools Komponente hergestellt werden. Die drools Komponente intern liest die Entscheidungsregeln aus einer Microsoft Excel-Tabelle zu machen. Es baut die Regeln, wenn es eine Änderung in der Datei ist. Nun ist die Domain-Experten ändern diese Tabelle bei Bedarf, und wir gehen nicht durch schmerzhafte Implementierungen!
Wenn Sie eine anspruchsvolle UI wollen, ist drools Guvnor eine leicht verfügbare Web-Anwendung (mit reicher UI), die Ihre Domain / Fachexperten zu bauen Regeln helfen würde, und speichern sie in einer Datenbank.
Andere Tipps
Die Drools Dokumentation spricht über, wenn eine Regel-Engine zu verwenden. http: //downloads.jboss .com / drools / docs / 5.1.1.34858.FINAL / drools-Experte / html_single / index.html # d0e181
Von den docs ...
Die kürzeste Antwort auf diese Frage ist „, wenn gibt es keine zufriedenstellende traditionelle Programmierung Ansatz zur Lösung der Problem ".., dass kurze Antwort, einige weitere Erklärung erforderlich ist. Das Grund, warum gibt es keine „traditionelle“ Ansatz ist möglicherweise einer der Folgendes ein:
- Das Problem ist einfach zu Geige für traditioneller Code.
Das Problem kann nicht komplex sein, aber Sie können keine nicht-zerbrechlich Weg von sehen den Aufbau einer Lösung für sie.
- Das Problem ist, über offensichtliche algorithmische Lösung.
Es ist ein komplexes Problem zu lösen, Es gibt keine offensichtlichen traditionellen Lösungen, oder im Grunde das Problem nicht vollständig verstanden wird.
- Die Logik ändert sich häufig
Die Logik selbst kann auch einfach sein aber die Regeln ändern ziemlich oft. Im viele Organisationen Software-Releases sind wenige und weit zwischen und steckbare Regeln können die „Beweglichkeit“ helfen, bieten die benötigt wird und in einem erwarteten maßen sicher.
- Domain-Experten (oder Business-Analysten) leicht verfügbar sind, sind aber nontechnical.
Domain-Experten besitzen oft eine Fülle Wissen über Geschäftsregeln und Prozesse. Sie sind typischerweise nontechnical, kann aber sehr logisch sein. Regeln kann es ihnen ermöglichen, die zum Ausdruck bringen Logik in ihren eigenen Bedingungen. Natürlich, sie haben immer noch kritisch zu denken und der Lage sein, das logische Denken. Viele Menschen in nicht-technischen Positionen hat keine Ausbildung in der formalen Logik, so vorsichtig sein und mit ihnen arbeiten, wie von kodifiziert betriebswirtschaftlichen Kenntnissen in Regeln, werden Sie oft aussetzen Löcher in die Art, wie die Geschäftsregeln und Prozesse werden zur Zeit verstanden.
Wenn er nicht verwenden ...
Als Regel Motoren sind dynamisch (dynamic in dem Sinne, dass die Regeln können sein gespeichert und verwaltet und aktualisiert Daten), werden sie oft als ein gesuchtes Lösung für das Problem der sich entfalte Software. (Die meisten IT-Abteilungen scheinen gibt es für die Zwecke der Verhütung Software wird ausgerollt.) Ist dies der Grund, warum Sie wollen eine Regel verwenden, Motor, beachten Sie, dass Regel Motoren am besten, wenn Sie schreiben können deklarative Regeln. Als Alternative, Sie können datengesteuerte Designs betrachten (Lookup-Tabellen) oder Skriptverarbeitung Motoren, bei denen die Skripte verwaltet werden in einer Datenbank und sind in der Lage zu sein, aktualisiert on the fly.
würde ich Ihren eigenen Parser vorschlagen. In diesem Zusammenhang, warum können Sie nicht serialisiert das Objekt und AJAX verwenden es im Backend zu validieren? Es trennt dann die Validierungslogik von der Benutzeroberfläche.
Ich würde einen Blick auf einige Beispiel Regel-Engine-Schnittstellen und sehen, welche wie ich. Sie können Web-basierte E-Mail-Regeln Schnittstellen buchen, um einige Ideen zu bekommen. Wenn Sie wirklich einen einfachen Regel-Engine benötigen, brauchen Sie nur eine gute Schnittstelle zu erstellen, und dann können Sie die Regeln an den Server mit Javascript senden.
Wahrscheinlich nicht. Sie brauchen ein anständiges Domain-Modell. Nicht ein, wo Ihre Objekte sind nur Daten Platzhalter. Sind Ihre Benutzer wahrscheinlich in der Lage sein System zu verstehen und zu verwenden, eine solche komplexe Regeln, und nicht diejenigen, die einfach nicht lieber in die Java-Programmierung, wo sie geeignete Verkapselung und Refactoring-Unterstützung haben? Regeln Systeme nur mit einfachen Regeln auf einer eingeschränkten Domäne arbeiten, wo man die Leute nicht trainiert als Programmierer erklären können, wie sie zu bauen. Und nicht vergessen Regeln Gebäude nur programmieren, so dass Sie immer noch die Versionskontrolle benötigen, Tests und wollen nicht Globals.
Would Jython nicht nützlich?
Jeder Ausdruck / Komplex-Regel der Körper einer Funktion sein könnte. So dass der Benutzer den Körper bereitstellt, und der Code setzt die Funktion spec um ihn herum, und führen Sie es.
können Sie legen auch jeder Java-Objekte / Variablen der eigenen in den jython Kontext in Ihrem Skript / Funktionskörper verwendet werden.
Dann haben Sie eine standardisierte, verlängerbar weitesten verbreitete Sprache in Ihrer Nähe. Aber ich denke, der Jython-Editor eine Herausforderung sein könnte.
Haben Sie versucht, JBehave ?
JBehave ist ein Framework für Verhalten Driven Development (BDD). BDD ist eine Weiterentwicklung von Test-Driven Development (TDD) und Akzeptanz-Test Driven Design und wird diese Praktiken besser zugänglich zu machen beabsichtigt und intuitiv zu Einsteiger und Experten gleichermaßen. Es verschiebt das Vokabular Test-basierte verhaltensbasierte von zu sein, und positioniert sich als Design-Philosophie.