`
hxpwork
  • 浏览: 109913 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

drools技巧:声明式关系编程

阅读更多
 

声明式关系编程 <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(资源描述框架)三元组是不合适的, 但可以幸运的被考虑成一种传输机制。声明式关系编程显然有一种更接近于11的数据库映射。[译者注:这段话涉及OWL的理论定义,为了更好的理解,请翻阅
http://zh.transwiki.org/cn/owlguide.htm]<o:p></o:p>

看一个我们提供的简单示例Conways Game of Life(将很快被更新到规则流,代替agenda group,使其更具有声明性)。在这个例子中,我们有一个巨大的NxN的表格单元对象,之前的方法是对每一格Cell有一个围绕在它周围的Cell的一个HashSet。要计算围绕在周围的死亡/生存单元格的数量,只能通过对每一个cellHashSet进行命令式的迭代。这将产生重复多余的工作,因为我们不知道那里有/没有变化,我们可以进行跟踪,但是接着会带来更多的用于跟踪的命令式代码。更新的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中的columnrow字段的叉集。<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

    它基于规则推理,允许用户以声明式的方式定义规则,并在运行时执行这些规则。drools 提供了一个高效的决策自动化框架,使得非技术人员也能通过规则语言进行业务规则的维护。 在描述中,虽然没有具体信息,但可以...

    Drools报错:The Eclipse JDT Core jar is not in the classpath

    NULL 博文链接:https://wu1g119.iteye.com/blog/2287940

    drools-示例:Drools:规则引擎

    drools-示例:Drools:规则引擎

    Drools

    Drools是一款强大的Java规则引擎,它为业务规则管理提供了高效、灵活且可扩展的解决方案。作为基于模型的决策自动化工具,Drools允许开发者将复杂的业务逻辑编码为一系列易于理解和维护的规则,这些规则可以独立于...

    drools安装与配置

    drools

    Drools技术指南.pdf

    3.接受数据输入,解释业务规则,并根据业务规则做出业务决策,从而给编程带来了极大的方便。 Drools的主要应用场景包括: 1. 为提高效率,管理流程必须自动化,尽管现代商业规则异常复杂。 2. 市场要求业务规则...

    规则引擎drools实例

    Drools 是一个强大的业务规则管理系统,它允许开发者以声明式的方式定义业务规则,并在运行时高效执行这些规则。Drools 提供了一种基于Java的规则引擎,它使用了领域特定语言(DSL)来编写规则,使得非程序员也能...

    规则引擎Drools.NET移植版

    **规则引擎Drools.NET移植版** Drools是一款强大的业务规则管理系统,源自Java社区,以其灵活、高效和可扩展的特性而广受赞誉。它允许开发者将业务逻辑以规则的形式编写,使得业务规则可以独立于应用程序代码进行...

    eclipse下的drools插件

    Drools是一款开源的规则引擎,它基于Java平台,允许程序员以声明式的方式编写业务规则,从而将业务逻辑与应用程序的主体逻辑分离。 【描述】:Drools插件的使用非常简单,只需要进行基本的拷贝粘贴操作即可快速配置...

    Drools 规则语言和域语言实例

    首先,Drools的规则语言是一种基于Drools Expert的声明式语言,类似于编程语言但更注重于表达业务规则。这种语言允许开发者用自然语言风格编写规则,例如: ```java rule "Age check for adults" when $customer ...

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

    Drools_规则引擎详解

    Drools 规则引擎详解 Drools 规则引擎是基于 Java 的开源规则引擎,由 JBoss 发布。作为一个业务规则管理系统(BRMS),Drools 提供了一个基于规则的系统,用于定义、执行和管理业务规则。Drools 的主要功能是将...

    drools5.1 规则流示例

    Drools 5.1 是一个强大的开源规则引擎,它基于Java语言,广泛应用于业务规则管理和决策支持系统。本示例旨在演示如何在Drools 5.1中使用规则流(Rule Flow)进行复杂的业务流程管理。规则流是Drools提供的一种工具,...

    Drools4 insurance例子

    Drools是一款开源的Java规则引擎,它允许开发者以声明式的方式定义业务规则,这些规则可以独立于应用程序代码运行,提高了业务逻辑的灵活性和可扩展性。Drools提供了强大的规则语言DRL(Drools Rule Language)以及...

    drools 6 英文文档

    Drools 6是JBoss组织开发的一个强大的规则引擎,用于构建复杂的业务逻辑。这个官方文档详细介绍了Drools 6的功能、安装、更新以及新特性。以下是对这些内容的详细解析: 1. **欢迎章节**: - **介绍**:这部分简要...

    公司内部drools培训资料

    5. **事件处理(Event Processing)**:Drools支持事件驱动编程,可以监听并响应特定的业务事件,如数据变更或时间触发。 ** 规则语言 ** Drools 使用两种主要的规则定义语言: 1. **Drools Expert**:使用基于...

    drools使用的jar包

    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包,运行...

    drools4.0教程

    2. 支持函数式编程:新增了对函数式编程模式的支持,允许开发者使用更高级的编程技巧来定义规则。 3. 强大的类型系统:Drools4.0引入了更强的类型检查,提高了代码的可靠性和安全性。 二、引擎性能提升 性能是...

    规则引擎Drools 之 springboot 集成、热加载

     本文源码,github 传送门:https://github.com/vincent9309/drools:  系统架构如下: 二、项目目录结构 三、springboot集成drools  1.pom文件引入依赖 org.drools drools-core 7.0.0.Final org...

    Drools规则引擎从入门到精通

    9 Drools WorkBench使用9.1 WorkBench基本使用9.2 创建会话9.3 编译并部署9.4 执行代码10 Drools决策表入门11 Drools决策表加强12 Drools决策表整合Springboot和MybatiesPlus13 动态编译Class文件实现Drools规则调用...

Global site tag (gtag.js) - Google Analytics