声明式关系编程 <o:p></o:p>
作者:Mark Proctor <o:p></o:p>
这篇文章是从我在InfoQ上的评论Debate: ODBMS sometimes a better alternative to O/R Mapping?.(讨论:ODBMS有时是比O/R映射更好的选择)引申而来
面向对象的深层图模型——pojo规范,难以通过声明进行推论,虽然它可以在命令式编程中有良好表现。随着WSC完成描述逻辑的标准化定义OWL-DL(一种面向语义Web的知识表示标记语言,具有较强的知识表达能力并适合大规模应用的推理效率)并将其与声明式推论系统如Drools结合(将在4.0之后增加基于模型的描述逻辑),你已经在应用开发方面有了一种更有力的方式(虽然可能没有框架式/子系统式开发)——不考虑OWL-Full,它是一种演习,并且RDF(资源描述框架)三元组是不合适的, 但可以幸运的被考虑成一种传输机制。声明式关系编程显然有一种更接近于1对1的数据库映射。[译者注:这段话涉及OWL的理论定义,为了更好的理解,请翻阅http://zh.transwiki.org/cn/owlguide.htm]<o:p></o:p>
看一个我们提供的简单示例Conways Game of Life(将很快被更新到规则流,代替agenda group,使其更具有声明性)。在这个例子中,我们有一个巨大的NxN的表格单元对象,之前的方法是对每一格Cell有一个围绕在它周围的Cell的一个HashSet。要计算围绕在周围的死亡/生存单元格的数量,只能通过对每一个cell的HashSet进行命令式的迭代。这将产生重复多余的工作,因为我们不知道那里有/没有变化,我们可以进行跟踪,但是接着会带来更多的用于跟踪的命令式代码。更新的Conways例子将使用关系方法,没有嵌套的对象(虽然仍然没有DL,它在4.0中提供),代替的是我们使用一个Neighbour类对每一个围绕的Cell进行双向的关联;这意味着我们简单的声明想要它对死亡/生存的Cell进行跟踪,系统将根据它对关系的理解以及什么有/没有变化的情况,为我们完成剩下的工作。
http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-examples/src/main/rules/org/drools/examples/conway/conway.drl
rule "Calculate Live"
agenda-group "calculate"
lock-on-active
when
theCell: Cell(cellState == CellState.LIVE)
Neighbor(cell == theCell, $neighbor : neighbor)
then
$neighbor.setLiveNeighbors( $neighbor.getLiveNeighbors() + 1 );
$neighbor.setPhase( Phase.EVALUATE );
modify( $neighbor );
end
rule "Calculate Dead"
agenda-group "calculate"
lock-on-active
when
theCell: Cell(cellState == CellState.DEAD)
Neighbor(cell == theCell, $neighbor : neighbor )
then
$neighbor.setLiveNeighbors( $neighbor.getLiveNeighbors() - 1 );
$neighbor.setPhase( Phase.EVALUATE );
modify( $neighbor );
end
我也建议你看一下"register neighbor"规则,你可以了解Neighbour关系怎样被设置声明,开发在Cell中的column与row字段的叉集。<o:p></o:p>
这只是一个使用建议逻辑的简单例子,你可以将这些关系开发的更多,尤其工作在数据集和一阶逻辑中的'collect', 'accumulate' ,'forall'情况时。更多的信息请看What's new in JBoss Rules 4.0,它会在下个月中旬发布。<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
分享到:
相关推荐
drools drools drools drools drools
NULL 博文链接:https://wu1g119.iteye.com/blog/2287940
drools-示例:Drools:规则引擎
drools
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行...
本文源码,github 传送门:https://github.com/vincent9309/drools: 系统架构如下: 二、项目目录结构 三、springboot集成drools 1.pom文件引入依赖 org.drools drools-core 7.0.0.Final org...
9 Drools WorkBench使用9.1 WorkBench基本使用9.2 创建会话9.3 编译并部署9.4 执行代码10 Drools决策表入门11 Drools决策表加强12 Drools决策表整合Springboot和MybatiesPlus13 动态编译Class文件实现Drools规则调用...
Welcome to Drools ================= Third party jars ---------------- Following third party jars are optional and are not included in Drools distribution: 1.Quartz: Quartz is an optional jar only ...
drools 版权声明:本文为CSDN博主「1Vincent」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: 一、为什么要使用规则引擎 有一天运营想弄一个积分策略,计算额外积分金额 ...
drools动态生成规则文件
drools最新版本学习资料,里面系统的介绍了drools规则引擎的简介以及集成到项目的教程内容。欢迎下载,收集不易,欢迎点赞。
特此声明: 小编出新版本的Drools技术指南的文档啦,相比之前的免费版添加了如下特点: 1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 2. 目前国内最全的Drools中文文档。...
该技术指南为开源的,内容少一些, 但做入门是没有什么问题的,如果有需要可以联系我 特此声明: 小编出新版本的Drools技术指南的文档啦,相比之前的免费版添加了如下特点: 1. 内容更加全面,更多细节,更多知识点...
drools决策表模版
官网Drools5.3使用手册,有介绍与spring jbpm drools集成等内容
Java的规则编译器
Drools是入门CEP(复合事件处理)引擎不错的选择,特别是你还是一个java工程师,它的规则引擎很好理解,性能也很好。特别推荐这个官方文档,虽然是英文版的,现在网上也找不到中文版的。不过我打算自己翻译,将会在...
english drools 6 Official document
drools