我经常需要实现某种用户可编辑的规则系统 - 要求通常不同,以至于同一系统不能直接应用,所以我经常遇到同样的问题 - 我该如何设计
的规则系统我认为规则系统/ DSL非常有价值,但我对我正确设计它们的能力感到不舒服。
您提供哪些参考/提示可能有助于简化这一点?
由于我遇到的问题的性质,现有的语言通常不适用。 (例如,您不要求普通计算机用户学习python以编写电子邮件过滤器。)同样,规则 languages ,例如JESS,只是部分解决方案,因为需要在规则语言之上构建一些(更简单的)用户界面,以便非程序员可以使用它。这个界面总是涉及删除某些功能,或者使这些功能更难以使用,process会带来上述相同的问题。
编辑:为了澄清,问题是设计规则引擎,我不是在寻找预建的规则引擎。如果您建议使用规则引擎,请解释它如何解决有关做出正确设计决策的问题。
答案 0 :(得分:2)
我们的供应商提供了此工具的内部演示: http://www.rulearts.com/rulexpress.php
作为一家公司,我们在规则引擎(例如Cleverpath Aion)方面拥有丰富的经验,但主要是面向开发人员的工具。这个工具(rulexpress)非常注重商业人士。它不是规则引擎。但它可以输出xml中的所有数据(所以基本上是你喜欢的任何格式),这就是我们可以考虑作为真实规则引擎的输入,例如: Windows Workflow Foundation(不是更大/更好的规则引擎之一,但仍然)。
这个工具本身看起来非常好,我从未在任何面向开发人员的工具中看到过一些东西。
还有一些围绕WF构建规则管理的工具,如果这是您选择的规则引擎,请查看InRule。
原始问题澄清后编辑: 虽然我很久以前就已经涉足这个问题了(在javacc中写了一些语言),但我认为这是一个糟糕的时间投资。我上面的评论是一样的:采用一个简单的规则引擎,一个简单的(商业)用户界面,使业务用户可以轻松维护,只花时间将两者结合在一起。
答案 1 :(得分:1)
答案 2 :(得分:0)
要考虑的Ruby实现是Ruleby(http://ruleby.org/wiki/Ruleby)
答案 3 :(得分:0)
我发现的一件事是能够将规则定义为表达式树使得实现变得更加简单。正如您所正确提到的,从项目到项目的要求是如此不同,以至于您每次都必须重新实现。表达式树与诸如访问者模式之类的东西相结合,形成了一个易于扩展的非常(无双关语)表达框架。您可以轻松地在表达式树之上放置一个非常动态的GUI,以满足您的需求。
希望这听起来并不像我说用锤子看起来像钉子一样,因为事实并非如此......根据我的经验,这已经不止一次派上用场了: - )< / p>
答案 4 :(得分:0)
首先,通常不建议让最终用户定义规则。那是因为他们没有开发背景,可以简单地编写进入无限循环或其他奇怪事物的“代码”。
因此,系统必须防止这种行为(因此,使其更复杂),接受这种可能性,或者禁止最终用户这样做。
如果您正在使用.NET,那么通过扩展Boo编译器(即使用Rhino.DSL,您可以使用一个类的简单DSL)来创建自己的DSL非常容易。