Wie eine Regelmaschine zu entwerfen?
-
01-07-2019 - |
Frage
Ich soll eine einfache Regel-Engine in C # erstellen. Jegliche führt, wie kann ich gehen ?. Es ist eine minimalistische Regel-Engine, und würde SQL Server als Backend verwenden. Haben wir alle allgemeinen Entwurf oder Design-Muster, die im Allgemeinen gelten Motoren zu regieren? Welche Art von .NET-Technologien kann ich ein Design? Alle mögliche Richtungen wäre hilfreich. Danke.
Lösung
Wenn Sie .NET 3.0 oder höher verwenden,
Ich habe dies an einem Projekt getan, und Sie können SQL oder XML als Backend verwenden, und es funktioniert super. Sie können die IDE verwenden, die mit den Workflow-Beispielen kommt und es in Ihren eigenen Anwendungen. Es ist ausgezeichnet.
Andere Tipps
-
Ich kann nicht glauben, dass Sie Ihre eigenen implementieren würde man bedenkt es so viele sind im Handel erhältlich und Open Source.
-
Ich empfehle einen Blick auf InRule als große kommerzielle Option nehmen, die preiswert ist, oder NxBRE in dem Open-Source-Raum.
Sie können auch versuchen http://rulesengine.codeplex.com/
Welche Art von Regel-Engine suchen Sie? Für Styling Praktiken? Wenn ja, gehen Sie bitte zuerst StyleCop . Nicht die Antwort, aber es könnte schon etwas da draußen für Sie sein.
Sie keine Hinweise auf Verfahren gegeben? (Dh, wenn dies durch Kursmaterial ergänzt, was Sie gerade lernen?) Wenn damit gemeint ist ein recht einfaches System sein, das Sie Erfolg finden könnten einen Blick in auf deterministische Finite State Machine und Nichtdeterministische Finite State Machine
Wenn Sie Business-Analysten haben das hohe Niveau Regel-Engine zu programmieren, dann fein - Pick eines der zuvor genannten Regel Motoren oder rollen Sie Ihre eigenen (einschließlich Workflows). Wenn nicht, dann codiert nur Ihre Geschäftslogik in Code und wenn Sie jemals Business-Analysten müssen mieten und das System wiederherstellen, sind Sie in einem guten Ort zu sein.
Wenn Sie möchten, dass Ihre Implementierung so etwas schreiben ...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule();
integerRule.Initialize(threshold, actual);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.Add(integerRule);
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
... oder diesen ...
[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()
{
// ARRANGE
int threshold = 5;
int actual = 10;
// ACT
var integerRule = new IntegerGreaterThanRule(threshold);
var integerRuleEngine = new RuleEngine<int>();
integerRuleEngine.ActualValue = actual;
integerRuleEngine.Add(integerRule);
// Get the result
var result = integerRuleEngine.MatchAll();
// ASSERT
Assert.IsTrue(result);
}
... dann vielleicht beachten Sie auch meine einfache Regel-Engine hier: http: / /www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx