我经常需要实现某种用户可编辑的规则系统 - 要求通常不同,以至于同一系统不能直接应用,所以我经常遇到同样的问题 - 如何设计规则系统那
我认为规则系统/ DSL非常有价值,但我对我正确设计它们的能力感到不舒服.
您提供哪些参考/提示可能有助于使这更容易?
由于我遇到的问题的性质,现有的语言通常不适用.(例如,你不能要求普通计算机用户学习,以写电子邮件过滤器蟒蛇.)同样,规则语言,如JESS,都只能解决部分问题,因为一些(简单)的用户界面需要建立在 - 规则语言的顶层,以便非程序员可以使用它.该界面总是涉及移除一些特征,或使这些特征更难以使用,并且该过程带来上述相同的问题.
编辑:为了澄清,问题是关于设计规则引擎,我不是在寻找预建的规则引擎.如果您建议使用规则引擎,请解释它如何解决有关做出正确设计决策的问题.
您建议使用什么技术为.NET的业务规则和验证应用程序块创建DSL ?为什么?
框架的体系结构由生产建立并经过验证.我只想创建一个.NET处理器,将人类可读的规则转换为已编译的Rule实现.
我所知道的选项是:
遗憾的是,考虑到DSL语法(可能会发展),这些方法都没有提供任何构建或多或少友好的用于编辑DSL的IDE.
任何想法或提示?
我正在寻找一个Java类,我可以在其中指定一组日期规则,例如"每隔3个星期日"和"每隔一个月第一次出现星期一".我希望能够从中获得类似无限迭代器的东西(.next()将返回与规则集匹配的下一个日期).
我想我自己可以自己构建它 - 但是日历很麻烦,而且感觉类似的东西已经存在了.我不喜欢重新发明一个更糟糕的轮子.
有人知道这样的事吗?我一直在看JODA,它似乎为它奠定了基础,但似乎没有提供我想要的全部功能..
我正试图写一条延迟射击的规则,直到最后一次射击至少15分钟.然而,Drools Fusion中的时间运算符仅允许推理关于彼此的两个事件而不是与当前时间相关的一个事件.
我想要这样的东西:
rule "some rule"
when
not LastFiredEvent(this before[0m, 15m] NOW)
…
Run Code Online (Sandbox Code Playgroud)
我已经尝试编写一个每秒触发一次的规则并插入一个心跳事件(也缩回之前的心跳),我可以在其他规则中使用它作为当前时间.
我发现这相当不优雅; 我错过了什么或者Drools Fusion真的没有这个东西吗?
NB.我不是在寻找延迟发射规则或规则,只能在15分钟的倍数上发射; 如果在最后17分钟内没有发生任何事情,规则必须立即开始以响应新事件.
需要明确的是,通过可修改的连接视图,我指的是通过连接两个或多个表构建的视图,这些表允许插入/更新/删除操作来修改任何/所有组件表.
这可能是一个postgres特定的问题,不确定.我也感兴趣,如果其他DBMS具有可修改的连接视图的特殊功能,因为据我所知,它们在标准SQL中是不可能的.
我正在研究一个postgres模式,我最近的一些阅读建议可以使用rules(CREATE RULE ... DO INSTEAD ...)构建可修改的连接视图.可修改的连接视图似乎是可取的,因为它允许在接口后面隐藏强规范化,提供经典抽象的机制.规则是实现的唯一选项,因为无法在视图上设置当前触发器.
然而,我试图设计的第一个可修改的视图遇到了问题,我发现许多人认为非平凡的规则是有害的(请参阅评论链接到这个SO答案).另外,我在网上找不到任何可修改的连接视图的例子.
问题(编辑以在问题上提出更好的观点):
非常感谢有关此主题的任何示例/讨论的链接.谢谢.
当我看到" 工具包里有什么东西?" 时,我正在思考Rich Hickey的简单轻松谈话.滑动.复杂性和简单性之间有一系列对比,这引起了我的兴趣:
复杂性:条件,简单:规则
有没有人对Rich在这里提出什么样的东西有所了解?
我想看看Fortify安全编码规则的具体规则(Fortify默认使用的规则),因为我想编写一份关于Fortify使用的所有规则的报告:
C:\Program Files\Fortify Software\HP Fortify v3.60\Core\config\rules但我找到了.bin文件,我看不到它们.AuditWorkbench,在安全内容管理方面我也看不到它们.有没有办法看到他们?谢谢你的帮助.
我对流星派对的例子有疑问.
如果我调用此代码:
Parties.allow({
insert: function () {
return true;
},
remove: function (){
return true;
},
update: function() {
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
每个人都可以插入,删除和更新.该示例中的代码是
Parties.allow({
insert: function (userId, party) {
return false; // no cowboy inserts -- use createPage method
},
update: function (userId, parties, fields, modifier) {
return _.all(parties, function (party) {
if (userId !== party.owner)
return false; // not the owner
var allowed = ["title", "description", "x", "y"];
if (_.difference(fields, allowed).length)
return false; // tried to write to …Run Code Online (Sandbox Code Playgroud) 我期待在nodejs中创建nools规则.我是nools规则引擎的新手.我正在尝试写一条规则,但我对nools一无所知.我研究过整个文档,但这让我很困惑.所以,任何人都可以帮助我如何在服务器端创建nools规则以及如何将这些规则与客户端连接?