`
hellostone
  • 浏览: 11240 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

drools 学习笔记(一)

阅读更多
文章整理了 一些看到的文章 和 官方文档的一些东西。

大多数web和企业Java应用可以分成三个部分:一个和用户交互的前台, 一个和后台系统,例如数据库交互的服务层,以及他们中间的业务逻辑。 现在使用框架构建前台和后台系统已经成为普遍共识(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但却没有一个标准的方法来构建业务逻辑。一些框架,例如 EJB 和 Spring 只在一个高层实现业务逻辑,但对于我们组织逻辑代码没有任何帮助,所以,为什么没有一个框架来替换冗繁,易错的if...then语句呢,这个框架应该和其它前台或后台框架一样,易于配置,具有可读性和重用性。下面我们将介绍Drools 规则引擎,这个来解决我们问题的框架。
  我们经常能见到噩梦般的业务逻辑代码:
  if ((user.isMemberOf(AdministratorGroup)&& user.isMemberOf(teleworkerGroup))|| user.isSuperUser(){
  // more checks for specific cases
    if((expenseRequest.code().equals("B203")||(expenseRequest.code().equals("A903")&&(totalExpenses<200)&&(bossSignOff> totalExpenses))&&(deptBudget.notExceeded)) {
    //issue payments
    } else if {
    //check lots of other conditions
    }
  } else {
  // even more business logic
  }
  当然会有一些优秀的程序员可以写出更漂亮些的代码,但那是相当费神的。而Drools等规则引擎 提供了一种很好的解决途径。
  先来看Drools的一个简单的例子:
   应用:某公司要对某一次参与生产的员工计算工资。
   工资=产量*基本工资*系数
   系数与该员工的产品合格率有关: 合格率=1 系数=1;0.9<=合格率<1 系数=0.95 ;0.85<=合格率<9 系数=0.9;0.8<=合格率<0.85 系数=0.8;合格率<0.8 系数=0.6;
   假设我们有这么一个类:
   public class Employee {
	private String name;

	private int product;

	private float hgl;
	...
   }

   上面应用用Drools的drl 应该这样描述:  

rule "FirstGz"
	
	when
		e:Employee(hgl==1);
	then 
	    System.out.println(e.getName()+"的工资:"+e.getProduct()*50*1);
		
end

rule "SecondGz"
	when
		e:Employee(hgl<1,hgl>=0.9);
	then 
	    System.out.println(e.getName()+"的工资:"+e.getProduct()*50*0.95);
	    retract(e);
		
end

rule "3Gz"
	when
		e:Employee(hgl<0.9,hgl>=0.85);
	then 
	    System.out.println(e.getName()+"的工资:"+e.getProduct()*50*0.9);
	    retract(e);
		
end

rule "4Gz"
	when
		e:Employee(hgl<0.85,hgl>=0.8);
	then 
	    System.out.println(e.getName()+"的工资:"+e.getProduct()*50*0.85);
	    retract(e);
		
end

rule "5Gz"
	when
		e:Employee(hgl<0.8);
	then 
	    System.out.println(e.getName()+"的工资:"+e.getProduct()*50*0.6);
	    retract(e);
		
end 

  
  这样就把业务逻辑和程序分开来了。如果要修改业务逻辑,那也是很容易的,只要修改Rule文件就可以了,而Rule文件是可以在一种类似XML的独立文件,可以很方便的替换修改。
分享到:
评论

相关推荐

    drools学习笔记

    对于学习 drools 的初学者,理解这些基础概念至关重要,它们将帮助你构建复杂的规则系统,实现业务逻辑的自动化和智能化。在实际应用中,根据需求灵活运用这些特性,可以极大地提升软件系统的可维护性和扩展性。

    Drools学习笔记

    Drools 是一个基于Java的规则引擎,它允许开发者用自然语言编写业务规则,并在运行时高效地执行这些规则。Drools 提供了一个强大的框架,使得业务逻辑与应用程序的其他部分保持松耦合,从而便于维护和扩展。 1. **...

    Drools6-笔记

    ### Drools 6基础知识与实践指南 #### 一、Drools 6简介与环境搭建 **Drools** 是一款开源的业务规则管理系统(BRMS),它支持...接下来可以深入学习Drools的高级特性,如决策表、模板等,以更好地应用于实际项目中。

    Drools安装配置学习笔记.doc

    Drools是一款强大的规则引擎,它允许开发者使用自然语言规则来编写业务逻辑,极大地提高了代码的可读性和可维护性。以下是对Drools安装配置的详细步骤和使用方法的介绍。 1. **下载Drools组件** - 首先,你需要...

    drools5 读书笔记

    《drools5 读书笔记》 Drools是一款强大的规则引擎,它基于Java语言,用于在企业级应用中实现复杂的业务逻辑。这个读书笔记主要涵盖了Drools 5版本的相关内容,结合源码分析和工具使用,旨在帮助读者深入理解其工作...

    JBPM3学习笔记

    **JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...

    Activiti学习笔记三:管理流程定义

    在“Activiti学习笔记三:管理流程定义”中,我们将深入探讨如何使用Activiti来管理和操作流程定义。 首先,流程定义是Activiti中的核心概念,它是流程模型的静态表示,描述了工作流的结构和规则。流程定义通常以...

    jbpm学习资料,jbpm教程

    在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始节点、结束节点、任务节点、事件节点等)来描述流程的结构。这些节点之间的连线代表了流程的流转路径。 2. *...

    JBPM相关学习资料

    - 博文链接:[JBPM学习笔记](https://zhaoshijie.iteye.com/blog/932534) 提供了关于JBPM的实践经验和案例分享,对于初学者来说是很好的参考资料。 通过深入学习和实践,可以更好地理解和掌握JBPM,从而在实际项目...

    Protege新手入门(入门篇+进阶篇+推理篇+使用笔记)

    使用笔记** - 定期保存工作:在编辑本体过程中,应经常保存以防意外丢失。 - 学习插件:Protege有丰富的插件库,如Ontology Library插件可以帮助查找和导入公共本体。 - 熟悉快捷键:熟练使用快捷键可以提高工作...

    工作流引擎笔记

    2. **规则集成**:Jbpm与Drools规则引擎紧密集成,允许在流程中嵌入决策逻辑。 3. **事件驱动**:支持事件触发的流程行为,比如基于时间或特定事件的流程跳转。 4. **持久化**:使用Hibernate进行数据持久化,保证...

    JBPM研究笔记

    **JBPM研究笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了全面的业务流程管理和工作流解决方案。这个系统的核心是基于模型驱动的架构,允许开发者通过图形化的方式设计、...

    JBossjBPM.rar_工作流引擎

    在提供的压缩包中,“JBossjBPM.nh”可能是一个笔记或文档文件,详细介绍了在实际项目中使用JBoss jBPM的经验和技巧。通常,这种文件会涵盖以下内容: 1. 安装与配置:如何在本地环境中设置jBPM,包括依赖库的导入和...

    Java面试:Java面试,Java基础,JVM,JUC(高并发),Java8新特性,集合,NIO,计算机基础,计算机网络,操作系统,数据结构,计算机组成原理,数据库,MySql,Oracle,Redis,设计模式,Python,工作流(Activiti),规则引擎(Drools),Spring,SpringCloud,Dubbo,Maven,Mybatis,JWT,Netty,Nginx,Shiro,Zookeeper,消息位置(MQ),微服务,Git,Docker,Utils, Linux,Shell

    当学习完一个知识点以后,自己做笔记,同时事后要总结,如果自己能把一个知识清晰表达出来的时候,自己也是有很大的收获和成长的; 赠人玫瑰手留余香。 目录 学习知识相关 Java 计算机基础(重要) 需要完善 需要...

Global site tag (gtag.js) - Google Analytics