2010-01-24 7 views
9

Ich arbeite an einer Entscheidungs-Engine/Regel-Evaluierungs-Engine. Zum Beispiel:Welche Muster/Muster eignen sich am besten für die Entwicklung der Regel-/Entscheidungs-Engine?

Input: Kunden und alle durch den Kunden Straftaten

Ausgang: Folgen der Straftaten

Eine Probe Fall würde:

Input: Kunde (Jhonny Chimpo, 999 -00-1111), Ordnungswidrigkeiten (Broke Fenster, schlug Chef, trat Teamleiter in seiner Leiste)

Ausgang: Ruft pink slip

Das Stück Code, das ich schreiben möchte, wertet verschiedene Straftaten aus, die auf Regeln für jeden Verstoß und kombinierten Verstoß beruhen. Der aktuelle Code ist nur ein Labyrinth von if-and-else-Anweisungen. Ich bin sicher, solche Geschäftsprobleme sind üblich. Welches Design/Unternehmensmuster wird normalerweise verwendet, um ein Problem wie dieses zu lösen?

Ist es das Spezifikationsmuster? Ich möchte, dass der Code offen für Erweiterungen ist, sauber und flexibel.

+0

Möchten Sie einen schreiben? Sie könnten einen Blick auf Jess http://www.jessrules.com/ – Joe

Antwort

3

Grundsätzlich schauen Geschäftsregeln wie

forall rules: 
    if <condition> then doAction(); 

Was ist mit der Kategorisierung aller Straftaten nach Schweregrad mit Noten, vielleicht extra Bonus für häufige "böse-d "Einige" Straftaten können verjähren und was auch immer erforderlich sein.

Dann wird ein Rohentwurf eines Algorithmus könnte sein:

  • Summe aller Noten von einem Kunden (gewichtet)
  • zu

maximal vergleichen Diese straight forward Datenstrukturen wäre anstelle von vielen (möglicherweise tief verschachtelt) wenn .. dann ..else Dinge.

+0

der aktuelle Code, den wir haben, ist Labyrinth von if-else Loops – Perpetualcoder

-1

Ich denke, Sie versuchen, ein Expertensystem zu entwickeln. Sie können den Ausdruck überprüfen und dann die entsprechenden Programmiersprachen als Prolog usw. überprüfen.

+0

werfen Ich versuche nicht, ein Expertensystem zu bauen. – Perpetualcoder

+2

@Perpetualcoder tatsächlich, was Sie aufgelistet haben, ist genau ein Expertensystem. –

+0

Ist ein Expertensystem auch eine Lernmaschine für eine bestimmte Aufgabe? – Perpetualcoder

1

Ich bin mir nicht sicher, ob eine der obigen Antworten so hilfreich war.

Ich habe ähnliche Komponenten mit expression trees geschrieben. Sie können Lambda-Ausdrücke erstellen, die Prädikate darstellen, diese kompilieren und ausführen, alle dynamisch, und dann eine Aktion als Antwort auslösen. Dieser Ansatz ist mächtig, flexibel und streift den ganzen if/else Horror aus (was definitiv nicht der richtige Weg ist).

Aber was Sie wirklich sprechen, ist Logikprogrammierung. Es gibt zahlreiche Implementierungen von Prolog über .NET.Prolog ist eine Logik-basierte Sprache, die viel für KI-Anwendungen verwendet wird, die sehr mächtig wird, sobald man sein Paradigma beherrscht.

Werfen Sie einen Blick auf einige von ihnen ..

+0

das ist etwas wirklich interessant. Ich bin kein Fan von Business-Regel-Engines da draußen – Perpetualcoder

+0

aber ..:) ... Ich bin auch kein Prolog-Fan..ich finde es einfach unglaublich :) – Perpetualcoder

+0

check out Ausdruck Bäume. – flesh

0

denke ich, jeder RETE-Algorithmus basierend auf der Regel-Engine dein Fall. Sie können Drools versuchen.