我应该用 C# 创建一个简单的规则引擎。有关我如何继续的任何线索?它是一个简约的规则引擎,并使用 SQL Server 作为后端。我们是否有普遍适用于规则引擎的通用蓝图或设计模式?我可以使用哪些 .Net 技术来设计?任何指示都会有帮助。谢谢。

有帮助吗?

解决方案

如果您使用 .NET 3.0 或更高版本,您 可以使用Windows Workflow Foundation的规则引擎 无需实际使用工作流程。

我在一个项目上做过这个,你可以使用 SQL 或 XML 作为后端,效果很好。您可以使用工作流示例附带的 IDE 并将其放入您自己的应用程序中。太棒了。

其他提示

  1. 考虑到有这么多可用的商业和开源软件,我不敢相信您会实现自己的。

  2. 我建议将 InRule 视为一个价格合理的绝佳商业选择,或者将其视为开源领域的 NxBRE。

您正在寻找什么样的规则引擎?用于造型练习?如果有的话,去看看 风格警察. 。不是答案,但可能已经有适合您的东西了。

您是否给出了有关方法的任何指示?(即,如果这是由课程材料补充的,您当前正在学习什么?)如果这是一个相当基本的系统,您可能会成功地研究 确定性有限状态机非确定性有限状态机

如果您让业务分析师对高级规则引擎进行编程,那么很好 - 选择前面提到的规则引擎之一或推出您自己的规则引擎(包括工作流程)。如果没有,那么只需用代码编写您的业务逻辑,如果您需要雇用业务分析师并重做系统,那么您就处于一个很好的位置。

如果你想编写这样的实现......

[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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top