`
hxpwork
  • 浏览: 111376 次
  • 性别: 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报错:The Eclipse JDT Core jar is not in the classpath

    它允许开发者通过声明式的方式定义业务规则,并在运行时执行这些规则。Drools的核心组件包括drools-core和drools-compiler,这两个JAR文件在压缩包中都有包含。 drools-core.jar是Drools的基础,包含了规则引擎的...

    drools drools drools drools drools

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

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

    drools7.25中文文档+drools技术指南.zip

    DRL是一种声明性的编程语言,让非程序员也能理解业务规则。文档会详细介绍DRL的语法和结构,包括条件、动作、规则定义等。 3. **规则生命周期**:从创建到执行,Drools规则经历了加载、激活、执行和完成的过程。...

    drools-distribution-6.3.0

    Drools 提供了一种声明式的编程模型,使得业务规则可以以接近自然语言的方式编写,这大大降低了业务逻辑与软件开发之间的隔阂。在该版本中,你可以找到各种示例项目,它们涵盖了从基本规则定义到复杂工作流的各个...

    Optaplanner & Drools.pptx

    ### Optaplanner与Drools综合应用解析 #### 一、Drools介绍 Drools是一个业务规则管理系统(BRMS),它提供了完整的业务规则管理解决方案。Drools支持多种类型的业务规则,如决策表、流程定义语言等,并且允许用户...

    Drools

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

    Learning-Drools:学习Drools规则引擎

    《深入学习Drools:构建智能业务规则引擎》 Drools是一款强大的开源规则引擎,由Jboss(现为Red Hat)开发并维护,它基于Java语言,是企业级应用中实现复杂业务规则管理的理想工具。Drools的核心功能是解析、执行和...

    Drools规则引擎使用demo

    Drools提供了一种声明式的方式来定义业务规则,使得非技术人员也能理解和修改规则,从而降低了业务逻辑与代码的耦合度。在这个"Drools规则引擎使用demo"中,我们将深入探讨Drools的核心概念、工作原理以及如何通过...

    Drools与Spring集成 登录测试

    2. 配置Drools:创建一个`KnowledgeBase`,它是Drools中的核心组件,用于加载和管理业务规则。这通常通过`KnowledgeBuilderFactory`和`Resource`对象完成,其中`Resource`用于指定规则文件的位置。 3. 注册Drools ...

    使用 Drools 规则引擎实现业务逻辑

    - **声明式编程**:开发者可以将注意力集中在“做什么”而非“怎么做”,这样可以极大地简化代码结构,提高可读性和可维护性。 - **本地规则表达式语言**:Drools引入了一种非XML的本地语言,使得规则编写变得更加...

    Drools5.3官网手册

    例如,可以使用 `&lt;drools:rulebase&gt;` 和 `&lt;drools:stateful-session&gt;` 元素来定义规则库和状态化会话。 - **事件监听器**(Event Listeners):讲解了如何使用 Spring 的依赖注入功能来配置 Drools 事件监听器,以...

    drools6.0 环境配置和安装

    它基于复杂的事件处理和决策管理网络,提供了一种声明式的方式来定义和执行业务逻辑。Drools 6.0 版本是在Eclipse开发环境中进行配置和安装的理想选择,因为它提供了一个专门的插件来简化这个过程。 首先,你需要...

    Drools 10分钟入门 代码 PPT

    Drools 提供了一个声明式的编程模型,使得业务规则可以与应用程序的其他逻辑分离,便于管理和维护。 在"drools.pptx"中,你可能会看到以下几个关键部分的讲解: 1. **Drools简介**:PPT会介绍Drools的历史、特点...

    droolsdroolsdrools

    《 Drools 深度探索:实例代码解析与实践指南》 Drools,作为一款强大的规则引擎,广泛应用于业务逻辑复杂、决策流程多变的IT系统中。它基于Java平台,采用领域特定语言(DSL)来编写业务规则,使得业务人员也能...

    JBoss_Drools教程

    作为一个强大的规则引擎,Drools 提供了一种声明式的编程方式,使得开发者可以专注于描述“做什么”,而非“怎样去做”。它能够解决复杂的问题,将逻辑与数据分离,提高代码的灵活性和可维护性。Drools 的优势在于...

    idea开发drools的设置文件

    Drools 提供了一个强大的规则语言(DRL - Drools Rule Language)来声明规则,并且集成了工作流引擎,使得业务流程管理成为可能。在 IT 领域,Drools 广泛应用于金融、保险、医疗等行业的决策自动化。 ** 在 IDEA ...

    drools flow分析报告

    Drools 提供了一个强大的规则引擎,支持声明式编程,使得业务规则可以与核心业务逻辑分离,方便管理和维护。其核心功能包括规则的编写、存储、推理和执行。Drools 使用DRL(Drools Rule Language)语言来编写规则,...

    drools语法参考和性能优化技巧

    ### Drools语法参考和性能优化技巧 #### 一、Drools简介 Drools是一个用Java语言编写的开源规则引擎,支持业务规则管理和决策表功能。它提供了一个灵活的框架来实现业务逻辑,尤其适合处理复杂的业务决策逻辑。本...

    Drools开发最全中文版技术指南

    这种声明式的编程方式让规则的编写更加直观,同时也便于非技术人员理解。 工作内存是Drools中的一个重要概念,它存储了所有与规则相关的数据和事实。当新的事实被插入到工作内存中时,Drools会自动检测并应用相关的...

Global site tag (gtag.js) - Google Analytics