Regelwerk für .NET
Wir haben eine business-Anforderung zu lassen, power-user Bearbeiten, Regeln für Versicherungstarife und-Registrierungen. Wir brauchen eine web-Benutzeroberfläche, die es Ihnen sagen "dieses Produkt ist nur für Leute, <55, es sei denn, Sie sind aus Texas und selbst ein Pudel" oder was auch immer. Edit zur Klarstellung: die Versicherung ist der Wahnsinn. Die Regeln unterscheiden sich von Produkt zu Produkt, Staat zu Staat und ändern sich ständig.
Schauten wir uns ein paar Regeln, die Motoren aber die kommerziellen sind 100K+ und die open-source-diejenigen, die nicht scheinen, um, fertig. Windows Workflow arbeitet, wenn wir diese Regeln vor der Zeit, sondern bauen Sie zur Laufzeit zu verlangen scheint die Umgehung der code-access security. Das ist beängstigend.
Sind wir Nüsse neu erfinden das Rad? Gibt es eine bessere alternative für .net?
InformationsquelleAutor der Frage Code Silverback | 2011-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass die Auswertung der Regeln ist die Herausforderung. Ich denke, dass die größere Herausforderung ist analysieren die Regeln, die der Benutzer eingeben kann. Für die Analyse der Regeln, die Sie berücksichtigen sollten, um einige DSL. Martin Fowler hat sich einige Gedanken über dieses hier. Dann vielleicht ANTLR dann könnte einen Blick Wert sein.
Für die Bewertung Teil: ich arbeite in der Finanzbranche und es gibt auch komplizierte Regeln, aber ich hatte nie die Verwendung einer rule-engine. Das bedeutet eine imperative Programmiersprache (in meinem Fall C#) wurden (bisher) ausreichend. Für einige Anlässe, die ich erwäge, eine rules engine, aber die technologischen Risiken(*) in der rule engine waren immer höher als die erwarteten Vorteile. Die Regeln waren (bis jetzt) noch nie so kompliziert, dass die deklarative Programmiermodell erforderlich war.
Wenn du eine objektorientierte Sprache, können Sie versuchen, die Spezifikation Muster. Eric Evans und Martin Fowler haben geschrieben eine ausführlichere Erklärung, die Sie hier finden können hier. Alternativ schreiben Sie Ihre eigene einfache Regel-engine.
(*) Fußnote: Irgendwie müssen Sie zum einbetten der rule-engine in Ihre Anwendung, die sehr wahrscheinlich in einigen objektorientierten Sprache. So gibt es einige technische Grenzen, an die Sie überbrücken müssen. Jede Brücke ist ein technologisches Risiko. Ich hatte einmal erlebt, dass ein Java-web-Anwendung mit einer rule-engine in C geschrieben. Am Anfang das C-Programm manchmal produziert core-dumps und Rissen die ganze web-Anwendung.
InformationsquelleAutor der Antwort Theo Lenndorff
Ich denke wie bei den meisten make-vs.-buy-Entscheidungen ist es immer eine Abwägung zu treffen haben persönlich. Wenn Sie kaufen ein off-the-shelf Lösung, die Kosten, die 100K+ und Sie sind nur gehen, um 1% von es als dass ist wahrscheinlich etwas Geld unbedacht ausgegeben. Jedoch, wenn das Produkt ist eine perfekte Passform, dann können Sie fast sicher sein kannst du nie, es zu bauen für weniger (vorausgesetzt, Sie haben eine Menge Erfahrung in diesem Feld).
Also Nein, Sie sind keine Nüsse neu zu erfinden das Rad, solange Sie nicht versuchen, alles zu tun, die off-the-shelve Produkt tut, und konzentrieren Sie sich nur auf die spezifischen Funktionen, die Sie benötigen und nicht selbst versucht, von der Idee zum Bau eines sehr schönen (aber teuren) Rahmen für etwas ganz einfaches.
InformationsquelleAutor der Antwort thekip
100K ist nicht kleingeld, aber eine anständige Programmierer für ein Jahr wird mit ziemlicher Sicherheit mehr Kosten als das - Sie haben ein billiger programmer, das kann es schneller als einem Jahr? wird es gerade so gut (für Ihre Bedürfnisse) oder besser?
InformationsquelleAutor der Antwort E.J. Brennan
Dies ist nicht so ganz mein Gebiet, ich kam durch diese Frage durch einen Unfall, also ich kann mich dran, aber ich würde werfen Sie einen Blick auf Wolfram Mathematica. Es ist ein technisches computing-Umgebung und multi-Paradigma (proprietary) Programmiersprache, unterstützt viele Programmier-Stile (einschließlich Regel-basierte und funktionale Programmierung). Es hat eine sehr Allgemeine Regel, mit Motor in seinem Kern. Trotz der name und Ruf als mathematische software (was es ist), es ist eine Allzweck-Programmiersprache, die auf einem sehr hohen Niveau. Eine Teilmenge der es kompiliert werden kann, C. Sie können das laden externer dlls dynamisch und transparent inter-arbeitet mit Java und .Net-Plattformen. Es hat auch eine web-version - webMathematica (welche auf Java basiert jedoch, jsp+Tomcat, aber niemand hält Sie koppelt es mit Ihr .Net - basierte web-Schicht direkt, nur etwas mehr Arbeit). Der zusätzliche Vorteil ist, dass, wenn Sie jemals brauchen keine mathematischen Berechnungen, Analyse, Diagramme, Statistiken, es ist alles da, und Stand der Technik.
Ich würde denken, es sollte viel schneller zu entwickeln, die Funktionalität, die Sie benötigen in Mathematica als in vielen anderen Sprachen /Lösungen (ich programmiere beruflich in Mathematica, C, Java und Javascript, so kann zumindest vergleichen dieser Sprachen). Die volle kommerzielle Lizenz sollte 2 oder 3 K für eine einzelne Maschine (4 Kerne), denke ich. Es hat mehrere Parallelisierung bietet. Das schwierigste, was in diesem Ansatz wäre es, finden Sie hier einen kompetenten Mathematica programmer, aber jemand mit einem hintergrund in der Funktions - /Regel-basierte Programmierung (LISP /Prolog, sagen) sollte in der Lage sein zu Holen, die Dinge ziemlich schnell. Auch kann es nicht schnell genug, wenn Sie benötigen sehr hohe Leistung - ich weiß wirklich nicht, wie es vergleicht in Bezug auf Leistung mit anderen rule-engines. Bei Gelegenheit, ich hatte eine chance, zu vergleichen, in Mathematica eine Regel-basierte Lösung für ein problem, das man kompiliert zu C, und ich würde sagen, dass gut geschriebene Regel-basierten code sollte auf der Ebene von Python in Bezug auf die Leistung, und im Durchschnitt vielleicht eine Größenordnung oder so langsamer als das kompilierte C. Aber das war hauptsächlich für numerische/computational-oder Daten-manipulation-Probleme, so dass ich denke, dass für die Probleme, die inhärent basierend auf Regeln, die performance-Lücke könnte kleiner sein.
Eine Sache, die ich bin sicher, dass in Mathematica können Sie Sätze erstellen von Regeln der Allgemeinheit und Komplexität relativ leicht mit einer kleinen Menge an code. Es ist eine beste Werkzeug für explorative Programmierung basiert auf Regeln, die ich bisher begegnet sind, mit einer sehr kurzen Entwicklungszyklus. Ich lade Sie zum Besuch der Mathematica-tag hier bei SO zu sehen, welche Arten von Problemen lösen. Für ein prominentes Projekt vollständig geschrieben in der Mathematica-Sprache (15 Millionen Zeilen code), check-out WolframAlpha knowledge engine.
InformationsquelleAutor der Antwort Leonid Shifrin
Gibt es eine bessere alternative für .net?
Eine Möglichkeit ist die Verwendung einer eingebetteten Skript-engine in Ihr .net-code, wie Iron Python. Geben Sie ein GUI für die Benutzer zu machen, Regeln, umwandeln "der Regel" zu einem Python-Skript, rufen Sie das Python-Skript-engine im inneren .Net das script ausführen.
Sind wir Nüsse neu erfinden das Rad?
Wenn nichts von der Stange Ihren Anforderungen entspricht, dann Nicht.
InformationsquelleAutor der Antwort Jon Raynor
Das problem ist, dass diese Dinge sind so eng mit der, wie ein Unternehmen individuell betreibt, ist es schwierig, wenn nicht unmöglich, effektiv zu verwenden, eine off-the-shelf-Lösung.
Habe ich etwas getan, wie diese zwei verschiedenen Möglichkeiten.
Den jüngsten (in VS 2005/Framework 2.0) war die Schaffung einer Basis-engine, behandelt die gemeinsamen Mindestanforderungen, die der Fall wäre, auf der ganzen Linie. Dies würde die Sachen wie name, Adresse, etc. Dann schrieb ich eine Reihe von Erweiterungs-DLLs verwendet, die gemeinsamen Schnittstellen geladen werden über die Reflexion für spezifische Arten/Regionen, beispielsweise durch Staats-oder Produkt-Linie. Power-user verwenden konnte, eine einfache app zu erstellen, ein Konto Konfiguration, die Sie benötigt (Konfigurationen gespeichert wurden, in eine DB). Wenn sich die Dinge verändert, die zugrunde liegende DLL modifiziert werden kann, oder eine neue Hinzugefügt. Ich hatte nur zu fügen Sie eine neue Erweiterungs-DLL, die während der 4 Jahre war ich auf diesem Projekt, aber es gab in der Regel ein oder zwei kleine mods benötigt einen Monat, um die Regeln.
In eine viel frühere VB6-Projekt habe ich eine geführte VBScript mit Strom zu versorgen Benutzer mit der Fähigkeit, code bestimmte Regeln. Obwohl der Nutzer wusste, dass Excel scripting gut und eine Assistenten-Benutzeroberfläche geschrieben wurde, um Ihnen zu helfen tun, was Sie tun mussten, Sie in der Regel nur gab mir die Aufgabe, die Kodierung der Regeln. Dieser plan irgendwie nach hinten Los, so dass ist, warum ich nicht verwenden Sie es später erneut, aber stattdessen entschied sich für eine mehr "prüfen, wählen" - Ansatz zur Regel-Gebäude.
InformationsquelleAutor der Antwort jfrankcarr
Schreiben Ihre eigene engine funktioniert, wenn Ihre Regeln sind einfach. Je komplizierter Sie bekommen, desto mehr Zeit wird es dauern, um es aufrecht zu erhalten.
Können Sie sabbert Server für die Ausführung Ihrer Regeln und noch tun Sie Ihre Haupt Anwendung .NET oder was auch immer Sprache, die Sie möchten. Sie benötigen noch Java für die Drools Server-Teil.
InformationsquelleAutor der Antwort Toni Rikkola