Frage

Ich versuche, für die Interpretation Daten ein regelbasiertes System zu konstruieren. Aber ich habe Probleme auf eine Art und Weise der Entscheidung über die Logik für die Speicherung und Interpretation von Regeln zu konstruieren.

Derzeit gibt es eine Datenbankstruktur, die sehr komplex, aber mit allen Aspekten der Speicherung der Regeldaten befassen. Die Idee ist, dass das System in der Lage sein wird, die Art und Weise, die MS Outlook ermöglicht es ein Benutzer zu imitieren Regeln hinzuzufügen.

Meine Probleme sind wie folgt:

  1. Welche Muster sollte ich diese Regeln innerhalb Objekte zu speichern verwenden?
  2. Sollte ich eval () oder die richtige Objektorientierung, um die Regeln durchführen?

Und Beispielregel könnte sein:

  

Hund muss Kragen in Bereich Park

Wo jedes Element (Hund, muss hat, Kragen, in dem Bereich, Park) ist ein separates Stück Logik interpretiert werden.

Jede allgemeine Beratung auf die obigen Fragen wird sehr geschätzt!

War es hilfreich?

Lösung

Ich habe realisiert nie ein System wie in einem „realen Welt“ Kontext beschreiben, aber ich habe mit ihnen eine beträchtliche Menge als Hobby-Projekte gespielt. Mein bevorzugter Ansatz ist eine Art von Logik Sprache zu verwenden, wie Prolog Behauptungen zu machen und sie überprüfen. Sie müßten Behauptungen für wo der Park ist, was es bedeutet, etwas zu haben, was ein Hund ist, und dann würden Sie eine Regel machen so ziemlich genau wie Ihr Beispiel in Klammern am Ende Ihres Beitrags. Es tut mir leid mein Prolog zu rostig ist, dass Sie ein gutes Beispiel zu geben ... Ich habe mit home-grown-Inferenz Sprachen zu lang zu spielen.

Es gibt Prolog Dolmetscher für in den meisten Sprachen Einbettung, obwohl ich über PHP5 nicht sicher bin. Sie könnten zusammen etwas einfach werfen, die Vorwärtsverkettungs Inferenz auf Regel-Datenstrukturen der eigenen Schöpfung in ziemlich kurzer Zeit, wenn Sie einen Prolog-Interpreter nicht finden können. Sie können in dieser Notizen auf automatisierte Inferenz interessiert.

Andere Tipps

Wahrscheinlich diese Antwort ist zu trivial / offensichtlich für Sie, aber ich dachte nur, wie ich so etwas in meinem aktuellen Projekt vorhandenen lösen würde, die eine Zend Framework-Anwendung ist. Ich dachte an die Filter- und validatorChains ZF verwendet. Ich nehme an, Sie eine finit Anzahl der möglichen Eingabeobjekte haben, eine finit Reihe von Bedingungen / Einschränkungen und eine finit Reihe von Aktionen. In diesem Fall würden Sie zunächst ein Objekt instanziiert und es gegen eine Kette von Bedingungen (Validierer) laufen, wenn alle Bedingungen erfüllt sind, führen Sie das Objekt gegen den actionChain. Hier würde ich wahrscheinlich eine Art von Aktion Prioritätssystem zu implementieren, da einige Aktionen vor den anderen durchgeführt werden müssen. Wie ‚Senden einer Benachrichtigung‘ und dann ‚Löschen‘ das Objekt in Frage. So in ZF würde ich einen benutzerdefinierten Validator für jede Bedingung / Einschränkung bauen. Ich glaube nicht, das Outlook-System sehr intelligent Bedeutung ist, dass ich nicht glaube, die Validatoren sind sehr allgemein gehalten.

In der db könnte es eine Tabelle für die aktuellen Regeln sein, eine für die Bedingungen und einem für Aktionen. Dann gibt zwei many-to-many-Tabellen könnten die Regel mit allen erforderlichen Bedingungen und Aktionen verknüpft.

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