7

Grüße!Dynamische Geschäftsregeln in einer Webanwendung

Bei der Arbeit an einem webbasierten Projekt mussten Geschäftsregeln und -logik vom Kunden angepasst werden. Ich möchte dies tun, ohne die Anwendung jedes Mal neu kompilieren zu müssen, wenn wir einen neuen Client auf dem System registrieren. Die von mir bisher beschriebenen Architekturen sind:

  1. Windows-Workflow: Erstellen von dynamischen Workflows und Speichern dieser in der Datenbank.
  2. Reflektion: Erstellen einer Geschäftsregelschnittstelle und Verwenden der Reflektion zum Laden der benutzerdefinierten Client-Assembly.
  3. Eine echte Business-Rules-Engine
  4. Implementierung einer IOC-Container-ähnlichen Strukturkarte. [zaff: hinzugefügt 6/4]

Haben Sie jemals etwas Ähnliches implementiert? Wenn ja, wie ist Ihre Erfahrung? Und schließlich gibt es eine andere Lösung, die ich erforschen sollte?

Danke für Ihre Hilfe !!

Antwort

2

Ich habe die meisten der Ansätze, die Sie erwähnen, implementiert. Die Antwort kann von einer Vielzahl von Faktoren abhängen.

Welche Client-Rolle (n) werden die Änderungen an den Geschäftsregeln vornehmen (z. B. Business Analyst, Entwickler, Power User usw.)? Eine aussagekräftige Unterstützung für Business-Analysten erfordert möglicherweise eine Regelengine mit externalisierten Regeln in einer db und einer verwendbaren Benutzeroberfläche.Eine sinnvolle Unterstützung für Entwickler könnte so einfach sein wie die Nutzung von etwas wie MEF (http://www.codeplex.com/MEF). Sie können auch berücksichtigen, wie oft die Geschäftsregeln geändert werden müssen und welche Arten von zugehörigen betrieblichen Anforderungen angewendet werden können (z. B. muss der Host-Prozess ausgeführt werden, die App-Domäne wird entladen, usw.). Eine gute Auswahl kann einige sorgfältige Überlegungen über mögliche und zukünftige Anforderungen erfordern.

2

Sie können datengesteuerte Geschäftsregeln wie this ausführen. Entscheidungsbäume können ebenfalls ein guter Weg sein.

Sie könnten auch über aspektorientierte Programmierung als eine Möglichkeit zur Implementierung von Geschäftsregeln denken.

Meine einzige Vorsichtsmaßnahme bei einer Rete-Induktionsregel-Engine ist, dass die Regelsätze klein und nah bei den Objekten gehalten werden sollten, die sie verwenden. Wenn Sie das Verhalten eines Objekts in einer Regel-Engine kapseln können, die Teil seines Status ist, umso besser. Ich interessiere mich nicht für die "Enterprise" -Lösung, die Tausende von Regeln in eine Singleton-Regel-Engine ablegt, die eine Abhängigkeit für jeden Teil des Unternehmens wird.

1

Dies ist möglicherweise nicht der beste Ansatz, aber mein Unternehmen hat Ihre # 2-Option in mehreren Fällen erfolgreich implementiert.

Wir konfigurieren grundsätzlich Clients in einer Datenbank oder Konfigurationsdatei, und für jeden Client gibt es eine Nachschlagetabelle, in der ein Klassenname gespeichert ist, der für jede auszuführende Geschäftsoperation aufgerufen werden kann. Wenn der Code eine Anforderung für Client A erhält, sucht er die zu verwendende Klasse, erstellt sie und führt sie über Reflektion aus.

Ich bin kein großer Fan von Code-bezogenen Dingen in der Datenbank, aber es funktioniert tatsächlich ok und ist in diesem Fall nicht zu kompliziert.

0

Ich mag WF, aber wenn Sie es angesehen haben und entschieden haben, dass Sie etwas anderes wollen, sollten Sie sich K2 ansehen. Außerdem hat BizTalk BRE-Unterstützung.

0

Ich habe eine dynamische Regel-Engine basierend auf der folgenden Open-Source-.NET-Geschäftsregel-Engine NxBRE erstellt. Ich habe die Flow-Engine als primäres Beispiel für meine dynamische Regel-Engine verwendet.

Ich verwendete die gleiche Architektur in Ihrer Frage erwähnt.

1

Ich schlage vor, eine Kombination aus 1 und 3.

Aber nicht speichern den Workflow in einer Datenbank speichern sie einen Entscheidungsbaum oder Regelfluss ist (wie wir sie nennen).

Das Ändern des Workflows für einen bestimmten Kunden oder die Einbindung in ein Profil ist eine einfache Aufgabe, wenn Sie über ein visuelles, aktionsorientiertes Tool verfügen, z. B. Visual Rules. Es ist auch von großem Vorteil, wenn Ihr Business Analyst oder Support-Mitarbeiter diese Änderung vornehmen kann, ohne den Code anpassen zu müssen.

Auch keine dieser Anforderungen erfordern eine komplizierte KI-Tools wie RETE und Inferenz-Sequential Logic ist am besten.

Verwandte Themen