<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
InfoQ发布了一个关于规则引擎的介绍Real-World Rule Engines,原文 http://www.infoq.com/articles/Rule-Engines
ONJava上也有两篇文章:
Give Your Business Logic a Framework with Drools http://www.onjava.com/lpt/a/6093
Using Drools in Your Enterprise Java Application http://www.onjava.com/lpt/a/6160
下面总结一下其中的精华:
大多数web和企业Java应用可以分成三个部分:一个和用户交互的前台, 一个和后台系统,例如数据库交互的服务层,以及他们中间的业务逻辑。 现在使用框架构建前台和后台系统已经成为普遍共识(例如, Struts, Cocoon, Spring, Hibernate, JDO, 和 Entity Beans), 但却没有一个标准的方法来构建业务逻辑。一些框架,例如 EJB 和 Spring 只在一个高层实现业务逻辑,但对于我们组织逻辑代码没有任何帮助,所以,为什么没有一个框架来替换冗繁,易错的if...then语句呢,这个框架应该和其它前台或后台框架一样,易于配置,具有可读性和重用性。下面我们将介绍Drools 规则引擎,这个来解决我们问题的框架。

下面是一个典型的Java业务逻辑的代码
if ((user.isMemberOf(AdministratorGroup)
&& user.isMemberOf(teleworkerGroup))
|| user.isSuperUser(){
// more checks for specific cases
if((expenseRequest.code().equals("B203")
||(expenseRequest.code().equals("A903")
&&(totalExpenses &&(bossSignOff> totalExpenses))
&&(deptBudget.notExceeded)) {
//issue payments
} else if {
//check lots of other conditions
}
} else {
// even more business logic
}
这是大多数程序员写业务逻辑的方法,但是有以下的问题:
- 如果用户有另一个选项,例如("C987") ,那么需要修改上面的代码,当代码很长的时候,修改代码是难于维护的
- 我们如何保证代码的正确性,这个代码只有程序员能够看到,真正的使用者,业务人员无法看到这个代码
- 很多应用程序有相同的业务逻辑,如果某个业务改变了,如何保证其他业务逻辑的一致性
- 业务逻辑能否不合java语言绑定?
- 业务逻辑能否用其他的脚本语言。
Java下的规则引擎标准就是JSR94,它的实现主要有JessJenaDrools
Drools中,一个典型的业务逻辑的配置,如下
<?xml version="1.0"?>
<rule-set name="BusinessRulesSample"></rule-set> xmlns="http://drools.org/rules"
xmlns:java="http://drools.org/semantics/java"
xmlns:xs
="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation
="http://drools.org/rules rules.xsd
http://drools.org/semantics/java java.xsd">
<!-- Import the Java Objects that we refer <br /> to in our rules -->
<import><br> java.lang.Object<br></import>
<import><br> java.lang.String<br></import>
<import><br> net.firstpartners.rp.StockOffer<br></import>
<!-- A Java (Utility) function we reference <br /> in our rules-->
<functions><br> public void printStock(<br> net.firstpartners.rp.StockOffer stock)<br> {<br> System.out.println("Name:"<br> +stock.getStockName()<br> +" Price: "+stock.getStockPrice() <br> +" BUY:"<br> +stock.getRecommendPurchase());<br> }<br></functions>
<rule-set><br><!-- Ensure stock price is not too high--><br><rule name="Stock Price Low Enough"><br><!-- Params to pass to business rule --><br><parameter identifier="stockOffer"><br><class>StockOffer</class><br></parameter><br><!-- Conditions or 'Left Hand Side' <br /> (LHS) that must be met for <br /> business rule to fire --><br><!-- note markup --><br><condition><br> stockOffer.getRecommendPurchase() == null<br></condition><br><condition><br> stockOffer.getStockPrice() </condition><br><!-- What happens when the business <br /> rule is activated --><br><consequence><br> stockOffer.setRecommendPurchase(<br> StockOffer.YES); <br> printStock(stockOffer);<br></consequence><br></rule><br></rule-set>
一条规则就是rule-set中的rule,如果有很多规则,就要写很多的rule。
上面规则的意思是判断股票价格是否小于100,如果100这个标准改变了,那么只要修改这个规则文件,而不用去修改源代码了
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=815558
分享到:
相关推荐
标题“使用ROR编写ORACLE WEB应用”表明我们要探讨的是如何使用Ruby on Rails(简称ROR)框架来构建与Oracle数据库交互的Web应用程序。Ruby on Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-...
AspMvc是一个快速、简单的面向对象的轻量级Asp开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。 借鉴了国内外很多优秀的(Java Ssh/Net NetMvc3.5 ThinkPhp)框架和模式,使用面向对象的开发结构和MVC...
在编程领域,Ruby on Rails(简称ROR)是一个深受开发者喜爱的开源Web应用程序框架,它基于Ruby语言,强调简洁、高效的代码编写。"敏捷开发第二版ROR必看"这个主题,指的是对敏捷开发方法论与Ruby on Rails的结合...
Ruby on Rails(简称RoR)是一种基于Ruby编程语言的开源框架,用于快速开发高效、优雅的Web应用程序。它遵循模型-视图-控制器(MVC)架构模式,强调DRY(Don't Repeat Yourself)原则,使得代码简洁且可重用性高。...
Web开发敏捷之道--应用Rails进行敏捷Web开发(第2版中文版).part15.rar
RoR(Ruby on Rails)是一种流行的开源Web开发框架,以其高效和简洁的代码著称。然而,随着网站规模的增长,性能优化成为必不可少的环节。在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在...
【基础知识】部分,学习者需要掌握至少一门网络编程语言,理解HTTP协议,熟悉Web应用开发技术,如ASP.NET、JSP、Java EE、LAMP、RoR等,并且需要了解数据库系统的漏洞和常见网络服务的漏洞挖掘。 【进阶知识】部分...
Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat Yourself”(DRY,...
Ruby on Rails(简称RoR或Rails)是一种开源的网络应用框架,用Ruby语言编写。它被设计用来轻松地实现MVC(模型-视图-控制器)设计模式,从而使开发人员能够快速和有条理地创建数据驱动的应用程序。接下来,我将详细...
Ruby on Rails(RoR)是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程,提高开发效率。RoR强调“约定优于配置”,提供了一套完整的工具链,使得开发者...
Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...
Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...
ROR 是一个流行的开源 Web 应用框架,它基于 Ruby 语言,而 PL/SQL 则是 Oracle 数据库中的过程式编程语言。这篇文章或教程可能是关于如何整合这两种技术,以实现数据库后端与 ROR 前端之间的通信。 PL/SQL 是 ...
在IT行业中,Ruby on Rails(简称ROR)是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。本文将深入探讨如何配置ROR开发环境,以及...
在开发和部署Ruby on Rails(简称ROR)应用程序时,选择合适的服务器软件是至关重要的一步。Lighttpd是一个轻量级、高效的Web服务器,尤其适合处理动态内容,如Rails应用。"用于ROR应用的lighttpd配置模板"提供了一...
因此,学习至少一门网络编程语言(如C/C++/Java/C#/Perl/Python等),熟悉HTTP协议和Web应用开发技术(如ASP.NET、JSP、J2EE、LAMP、RoR等)至关重要。 此外,还需要深入理解Web应用程序漏洞的分类、成因及挖掘和...
在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...
Ruby on Rails,简称RoR,是由David Heinemeier Hansson基于Ruby语言开发的一款开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,使得开发者能够更快速地构建功能丰富的web...
"intimate_web" 是一个基于 Ruby on Rails (ROR) 框架开发的应用程序。Ruby on Rails 是一种流行的开源 Web 开发框架,它遵循 Model-View-Controller (MVC) 设计模式,用于构建数据库驱动的 web 应用程序。这个应用...