Data Driven Rules - Engine Drools
Ich habe die Auswertung Drools als Rules Engine für den Einsatz in unserem Business-Web-Anwendung.
Mein use-case ist ein Order-Management-Anwendung.
, Und die Regeln sind der folgenden Art:
- Wenn User Geben, die "BESONDERE" geben einen zusätzlichen Rabatt von 5%.
- Wenn der Benutzer gemacht hat, 10+ bereits Kauft, geben einen zusätzlichen Rabatt von 3%.
- Wenn die Produktkategorie ist "ALT", geben ein Geschenk Behindern den Benutzer im Wert von $5.
- Wenn die Produktkategorie ist "NEU", geben Sie ein Geschenk Behindern den Benutzer im Wert von $1
- Wenn Benutzer Einkäufe über $1000 in die Vergangenheit, der Versand ist Kostenlos
Die unmittelbare Herausforderung, die ich sehe, ist, dass:
- Es gibt keine sinnvollen Benutzeroberfläche, die ich anbieten kann, um den Endbenutzern das ändern, das die Regeln.
- Guvnor-UI oder einem beliebigen Editor zu ändern drl-Dateien ist einfach nicht akzeptabel, aus Endbenutzer-Sicht
- Die meisten dieser Regeln arbeiten oft große Daten in db
So,
- Ich will eine Möglichkeit für den Admin-Benutzer angeben, diese Regel aus meiner Web App-Benutzeroberfläche.
- Könnte ich diese "Regeln" in der Datenbank, und dann mit Ihnen arbeiten über Drools - zumindest die, die mich zu "ändern" diese Regeln über " meine "eigene" UI. Das ist also so etwas wie eine Entscheidung, die Tabelle in der DB.
- Was ist der beste Weg zu gehen über diese?
InformationsquelleAutor Jasper | 2013-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie bat mich, Sie geben eine Antwort auf deine Frage, da meine Antwort auf Data driven business rules. Meine Antwort auf diese Frage war, dass SQL ist eine schlechte Lösung ausführen business-Regeln in der Datenbank gespeichert. Die person, die gefragt, die Frage wollte zum generieren von SQL-Ausdrücken von Ihren gespeicherten business-Regeln, und ich warnte davor, dies zu tun, denn es würde zu Problemen führen, in Sicherheit, Testbarkeit, performance und Wartung.
Habe ich nicht verwendet Drools, aber ich entnehme der Dokumentation, dass es Guvnor, eine business-Regel-manager unterstützt die Verwendung eines RDBMS als repository für Benutzer-definierten Regeln.
Apache Jackrabbit ist nicht ein RDBMS, es ist "ein content repository ist eine hierarchische content store mit Unterstützung für strukturierte und unstrukturierte Inhalte, Volltextsuche, Versionierung, Transaktionen, Beobachtung und vieles mehr." Dies scheint ein geeigneter Aufbewahrungsort für Drools.
Aber sabbert nicht sagen, dass es versucht, mithilfe von SQL zum ausführen von business-Regeln. Es hat eine separate Komponente, Drools Expert (Rules Engine) zu tun.
SQL ist auch eine deklarative Programmiersprache, aber es ist entwickelt, um relationale Operationen auf der Tabelle-strukturierten Daten. Eine Sprache, die zur Implementierung einer rules engine hat verschiedene Ziele, und können wahrscheinlich Dinge tun, die SQL nicht kann (und Umgekehrt).
Also ich würde vorschlagen, wenn Sie sabbert, fühlen Sie sich frei, um die Verwendung eines RDBMS als ein repository, wie Sie Dokument (verwenden Sie Ihre JCR-konforme Implementierung der content repository, versuchen Sie nicht, entwerfen Sie Ihre eigenen). Dann nutzen Sie Ihre Drools Expert als eine spezielle Sprache entwickelt, die für die Ausführung Regeln.
InformationsquelleAutor Bill Karwin
Out of the box, Guvnor bietet web-basierte entscheidungstabellen (und Excel, wenn Sie bevorzugen), als Sie sagen, Sie möchten zur Verfügung zu stellen. Es bietet geführte Redaktion für komplexere Regeln, aber Eure Regeln würde zu sein scheinen sehr einfach.
Wie bereits erwähnt, Guvnor unterstützt entscheidungstabellen. Wenn Sie nicht wie das layout der Guvnor web-Anwendung, dann können Sie nur einbetten der Guvnor-Editoren in Ihre eigene web-Anwendung.
Die Größe der Datenbank ist irrelevant für die Nutzung der Guvnor. Guvnor ist für die Bearbeitung von Regeln, keine Laufzeit-Evaluierung. Drools Expert ist die runtime rules engine. Es ist schnell. Es kann mit sehr großen Datenmengen und sehr große Mengen von Regeln. Alles, was Sie tun müssen, ist schreiben Datenbank Abfragen, um eine relevante Stücke von Daten in der Regel-engine zur Laufzeit. Sie müssen das tun, was auch immer Lösung, die Sie versuchen zu implementieren.
Auf einer Seite beachten, wenn Sie wirklich nach einer Erklärung der Regeln, wenn die Motoren gut sind (und schlechte) Lösungen für ein problem, dann ich würde empfehlen, das Lesen der Warum verwenden Sie eine Regel-engine? Abschnitt der Drools Expert Handbuch.
InformationsquelleAutor Steve
Regel, die ich gefunden habe, ist es einfacher, mit zu arbeiten auf einer mehr abstrakten Ebene, wie ein Domain-Modell, und haben eine Art programmgesteuerte Konvertierung von Drools-Regeln, statt sich mit Drools-Regeln direkt. Auf diese Weise können Sie speichern Sie Ihre Domain-Modell, jedoch, das Sie mögen, und Sie können bauen UIs um ihn herum, etc, und immer noch die option zum erstellen von Drools-Regeln-on-demand. Dann die Herausforderung dabei ist die Schaffung eines programmatischen transformation vom Modell zum Drools-Regeln, aber templating tools helfen hier. Ich habe Groovy Template für diese, und es hat gut funktioniert.
InformationsquelleAutor kevinpeterson