如何设计规则引擎?

时间:2008-09-18 14:39:35

标签: c# sql-server rule-engine

我应该在C#中创建一个简单的规则引擎。关于我如何进行的任何线索?它是一个简约的规则引擎,并将使用SQL服务器作为后端。我们是否有通常适用于规则引擎的一般蓝图或设计模式?我可以使用哪种.Net技术来设计一种?任何指示都会有所帮助。 感谢。

7 个答案:

答案 0 :(得分:14)

如果您使用的是.NET 3.0或更高版本,则需要can use the Rules Engine of Windows Workflow Foundation而无需实际使用工作流程。

我在一个项目上完成了这个,你可以使用SQL或XML作为后端,它运行得很好。您可以使用Workflow示例附带的IDE并将其放入您自己的应用程序中。这很棒。

答案 1 :(得分:3)

  1. 我不敢相信你会实现自己的,因为有很多可用的商业和开源。

  2. 我建议您看看InRule是一个价格合理的商业选择,还是开源领域的NxBRE。

答案 2 :(得分:1)

答案 3 :(得分:0)

您在寻找什么样的规则引擎?对于造型实践?如果是这样,请查看StyleCop。不是答案,但可能已经有了适合你的东西。

答案 4 :(得分:0)

您是否有任何方法指示? (如果这是由课程材料补充你目前正在学习什么?)如果这是一个相当基本的系统,你可能会找到成功的Deterministic Finite State MachineNondeterministic Finite State Machine

答案 5 :(得分:0)

如果您有业务分析师来编写高级规则引擎,那么请选择一个前面提到的规则引擎或自己动手(包括工作流)。如果没有,那么只需在代码中编写业务逻辑代码,如果您需要聘请业务分析师并重做系统,那么您就是个好地方。

答案 6 :(得分:0)

如果你想编写类似的实现......

[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