Как разработать движок правил? - PullRequest
17 голосов
/ 18 сентября 2008

Я должен создать простой движок правил в C #. Есть какие-нибудь выводы о том, как я могу действовать? Это минималистичный механизм правил, который будет использовать SQL-сервер в качестве серверной части. Есть ли у нас какие-либо общие схемы или шаблоны проектирования, которые обычно применяются к механизмам правил? Какие технологии .Net я могу использовать для их разработки? Любые указания будут полезны. Спасибо.

Ответы [ 7 ]

14 голосов
/ 18 сентября 2008

Если вы используете .NET 3.0 или более позднюю версию, вы можете использовать механизм правил Windows Workflow Foundation без необходимости активного использования Workflow.

Я сделал это в проекте, и вы можете использовать SQL или XML в качестве бэкэнда, и он прекрасно работает. Вы можете использовать IDE, которая поставляется с примерами Workflow, и поместить ее в свои собственные приложения. Это отлично.

3 голосов
/ 18 сентября 2008
  1. Я не могу поверить, что вы реализовали бы свое собственное решение, учитывая, что существует так много коммерческих и открытых источников.

  2. Я рекомендую взглянуть на InRule как на отличный коммерческий вариант по разумной цене или на NxBRE в открытом пространстве.

1 голос
/ 07 сентября 2011

Вы также можете попробовать http://rulesengine.codeplex.com/

0 голосов
/ 23 января 2015

Если вы хотите написать свою реализацию примерно так ...

[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);
}

... или это ...

[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);
}

... тогда, возможно, посмотрите мой простой механизм правил здесь: http://www.duanewingett.info/2015/01/21/SimpleCRuleEnginePart1TheRuleEngine.aspx

0 голосов
/ 28 июля 2009

Если у вас есть бизнес-аналитики, которые программируют механизм правил высокого уровня, тогда хорошо - выберите один из вышеупомянутых механизмов правил или используйте свой собственный (включая рабочие процессы). Если нет, то просто кодируйте свою бизнес-логику в коде, и если вам когда-нибудь понадобится нанять бизнес-аналитиков и переделать систему, вы окажетесь в подходящем месте.

0 голосов
/ 18 сентября 2008

Вам дано какое-либо указание на метод? (то есть, если это дополнено материалом курса, что вы изучаете в настоящее время?) Если это достаточно простая система, вы можете добиться успеха, изучая Детерминированный конечный автомат и Недетерминированный конечный режим машина

0 голосов
/ 18 сентября 2008

Какой тип правил вы ищете? Для практики стайлинга? Если это так, перейдите на страницу StyleCop . Не ответ, но там уже может быть что-то для вас.

...