ich möchte gerne etwas abbilden, mit dem ich Regeln prüfen kann und wenn diese Regel zufrifft dann eine entsprechende Aktion ausführen kann.
Also als Beispiel:
- Ein User füllt ein Webformular aus: Bedingung1: Enthält der Vorname den Wert "Hugo", Aktion1: soll ein Angebot erstellt werden
Was ich vorhabe:
Ich habe eine Tabelle "Rules" in meiner Datenbank.
Zusätzlich speichere ich in der Tabelle eine XML Struktur ab.
Diese enthält dann:
1..n Bedingungen (RuleCondition)
1...n Aktionen (RuleAction)
Ich habe RuleCondition und RuleAction derzeit in der Datenbank abgebildet. Allerdings bin ich über den Ansatz nicht so ganz glücklich. Einfach aus diesem Grund, weil es immer wieder neue Anforderungen und Änderungen am Datenmodell gibt und die Unterschiede der verschiedenen Entitäten groß ist.
Zum Punkt Entiäten:
- Angebot erstellen
- Rechnung erstellen
- Task erstellen
- Wert von Feld updaten
etc.
Das Ganze in einer XML - Struktur zu speichern, bietet mir mehr Flexibiltät, was die Änderungen / Neue Entities anbelangt. Ein neues Feld oder eine neue Entität hinzuzufügen ist hierbei ohne erhöhtem Risiko im Gegensatz zu einem Update in der Datenbankstrutkur.
Zudem möchte ich nicht für jede Entität eine Datenbanktabelle anlegen. Jede Entität hat ihre eigenen Besonderheiten, sodass ich womöglich für jede Entität eine eigene DB-Tabelle bräuchte.
Demnach:
Mein Ansatz ist nun diese Regel (Bedingung und Aktion) als XML-Struktur in der DB zu speichern.
Es geht hier nur um die eigentliche Spezfikation der Regel (was soll ausgeführt werden, wenn dies zutrifft...). Also nichts anderes als eine Angebotsvorlage, die definiert wie das Layout aussehen soll.
Meine Frage ist nun:
Ist das eine gute Idee? Welche Nachteile habe ich dadurch (außer ggf. Performance -> Zugriff DB + Auslesen XML).
Ich greife auf diese XML-Struktur ja nur beim Auftreten eines Events zu. Also Kunde füllt Webformular aus etc. Es heißt die Strukur gebe ich nicht in einer List im Webfrontend aus (außer beim Definieren der Regel ansich)
Einfach aus diesem Grund, weil es immer wieder neue Anforderungen und Änderungen am Datenmodell gibt und die Unterschiede der verschiedenen Entitäten groß ist.
Ich denke, Du versuchst mit XML ein Problem zu erschlagen, das Du gar nicht haben solltest. Wenn Du ständig was an der Struktur (egal ob XML oder RDBMS) ändern musst, ist die Abbildung nicht abstrakt genug.
Hi,
Ganz grundsätzlich: Was Du vorhast, ist ein sehr geläufiger Anwendungsfall in Enterprise Java Anwendungen. Und es ist äußerst schwierig, eine Regel-Engine selbst zu implementieren -> was wenn eine Regelausführung dazu führt, dass eine weitere Regel greift? Du bist dann bei einem Rete-Netzwerk...