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.

War es hilfreich?

Lösung

Wenn Sie .NET 3.0 oder höher verwenden, kann die Rules Engine von Windows Workflow Foundation verwenden, ohne acutally-Workflow 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

  1. Ich kann nicht glauben, dass Sie Ihre eigenen implementieren würde man bedenkt es so viele sind im Handel erhältlich und Open Source.

  2. 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

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