如何设计规则引擎?

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

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

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

  1. 考虑到有这么多可用的商业和开源,我无法相信你会实现自己的。

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

您也可以尝试http://rulesengine.codeplex.com/

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

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

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

如果你想编写你喜欢的实现……

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