Der Regelkatalog

Aufbauend auf dem Konzept der fachlichen Regel, als Kapselung von austauschbaren fachlichen Logiken und Metadaten, bietet ISA einen zentralen Regelkatalog mit folgenden frei definierbaren Elementen1

  • Regeln in Form von Java oder JavaScript Funktionen (mehrsprachenfähig)
  • Datenelementdefinitionen im JSON Format
  • mehrsprachenfähige Ressourcen2

Die Katalogelemente werden dabei als Textdokumente in einer Dokumentendatenbank (alternativ Dateisystem) hinterlegt und sind so einfach und zentral pflegbar. Die Adressierung erfolgt genau wie in Java mit eindeutigen, punktnotierten Namen, die eine Paketstruktur bilden, die in einem Dateisystem über Verzeichnisse abgebildet wird z.B.

  • isa.common.rules.SizeRule oder isa.common.rules.UserId.

Die entsprechenden Dateien sind dann z.B.

  • <root>/isa/common/rules/SizeRule.json bzw. <root>/isa/common/rules/UserId.json

Alternativ können die Definitionen auch in Sammeldokumenten wie z.B.

abgelegt werden. Eine explizite Angabe des Paketnamens bei den einzelnen Elementen ist nicht notwendig, da dieser durch die Dateistruktur eindeutig vorgegeben ist und vom System automatisch verarbeitet wird. Der Datenbankschlüssel eines Elements ist der qualifizierte Name mit Unterstrichen anstelle der Punkte z.B. isa_common_rules_UserId und wird ebenfalls automatisch erzeugt.

Standardmäßig existiert somit ein Verzeichnis wie ein Java Source Code Verzeichnis in dem alle Regeln, ihre Nachrichten und alle Datenelemente in Form von Javascript und JSON Textdateien abgelegt sind. Dieser Source Code kann dadurch auch wie gewohnt mit einem üblichen Source Code Management System (z.B. Git oder SVN) verwaltet werden.

Im Laufzeitsystem übernimmt dann eine Dokumentendatenbank die Lieferung und Verwaltung der Daten, die zuvor über eine Import Funktion des isa.RuleService initial geladen wurden.

RuleCatalogConcept

Diese Mechanik ist jedoch nicht zwingend. Alternativ können Regeln und Definitionen auch mittels eines Datenbankinterfaces oder einer eigenen GUI direkt in der Datenbank erstellt und gepflegt werden (Online Demo).

In Java kann auf diese Paketstrukturen über einfache zentrale Services zugegriffen werden.

Der “getRules” Aufruf liefert eine Map mit allen im Paket definierten Regeln. Ein solches Paket kann dann dem isa.Rules Modul übergeben werden, wodurch die Regeln im aktuellen Systemkontext verfügbar gemacht werden.

	@Service()
	protected RuleServiceIFace ruleService = null;
	@Service()
	protected RulesIFace rules = null;

	...

	//Regeln eines Paketes aus dem Regelkatalog lesen
	Map lRules = ruleService.getRules("isa.common.rules", Locale.GERMAN);

	//Regeln im aktuellen Kontext aktivieren
	rules.defineRules(lRules);

	//Eine Regel instantiieren
	Rule lRule = rules.newRule("isa.common.rules.SizeRule", new Object[]{3, 8});

	//Regel anwenden
	Map lResult = lRule.applyTo("123");
	if(!lResult.isEmpty()){
		//do something
	}

	//Analog dazu der Zugriff auf Datenelementdefinitionen
	Map lDataElements = ruleService.getDataElements("isa.common.rules");
	DataElementDoc lDoc = (DataElementDoc)lDataElements("isa.common.rules.UserId");

	getCtrl("tfUser").setFormat(lDoc.getFormat());
	getCtrl("lbUser").setText(lDoc.getLabel("de"));

Der Aufbau ist sehr einfach aber gerade deshalb sehr flexibel, skalierbar und leistungsfähig. Die Speicherung der Informationen in einer neutralen Dokumentendatenbank erlaubt die unaufwendige und individuelle Verwaltung selbst von großen Regelmengen – ohne dabei auf proprietäre Produkte oder Formate angewiesen zu sein.

Durch die Dokumentenorientierung kann ein System oder Projekt vollkommen flexibel und individuell definieren, welche Informationen es braucht und ablegt – ohne dass dafür Änderungen an fest codierten Java- oder Datenbankstrukturen notwendig sind. Daher können sich auch die genutzten Dokumente mit der Zeit verändern und sukzessive mehr Informationen definieren. Zudem sind die in JSON und JavaScript definierten Strukturen und Informationen für jeden Nutzer leicht les-, versteh- und bearbeitbar – auch deshalb weil sie immer einzelne, unabhängige, kleine “Blöcke” sind, die nicht in einem komplexen systemischen Zusammenhang stehen.

Auch die Verknüpfung von Informationen ist durch die eindeutig identifizierende Namensgebung extrem einfach, les- und navigierbar – weil die Dokumente wie Hypertext genutzt werden können.

_____________________
1: Der ISA Regelkatalog bzw. das Regelsystem ist keine Rule Engine. Eine Rule Engine zielt  u.a. darauf ab sehr viele Regeln auf sehr viele Objekte anzuwenden und dabei Speicher- und Rechenkapazitäten zu schonen bzw. optimal auszunutzen.

ISA Regeln zielen dagegen in erster Linie auf die Kapselung und die Zentralisierung von austauschbarer Fachlogik um die Sicherheit und Flexibilität der Anwendungslogik zu verbessern

2: JSON Dokumente in einer zentralen Dokumentendatenbank sind eine sehr einfache und sehr effiziente Alternative zu z.B. Resource-Bundles. Insbesondere weil mit solchen Dokumenten mehrsprachige Texte sehr leicht zu gestalten und zu verwalten sind – ohne dass dafür Programmcode kompiliert oder paketiert werden muss.