17

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

4

7 回答 7

14

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

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

于 2008-09-18T14:44:48.660 回答
3
  1. 考虑到有这么多可用的商业和开源资源,我不敢相信你会实现自己的。

  2. 我建议将 InRule 视为价格合理的绝佳商业选择,或者将 NxBRE 视为开源空间。

于 2008-09-18T14:44:27.523 回答
1

你也可以试试 http://rulesengine.codeplex.com/

于 2011-09-07T06:04:43.210 回答
0

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

于 2008-09-18T14:41:35.283 回答
0

你有方法说明吗?(即,如果这由课程材料补充,您目前正在学习什么?)如果这是一个相当基本的系统,您可能会成功研究确定性有限状态机非确定性有限状态机

于 2008-09-18T14:49:26.763 回答
0

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

于 2009-07-28T00:08:38.270 回答
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);
}
于 2015-01-22T22:27:18.040 回答