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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top