回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
来源:互联网 发布:万网域名控制面板 编辑:程序博客网 时间:2024/05/19 20:00
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<200)
&&(bossSignOff> totalExpenses))
&&(deptBudget.notExceeded)) {
//issue payments
} else if {
//check lots of other conditions
}
} else {
// even more business logic
}
这是大多数程序员写业务逻辑的方法,但是有以下的问题:
- 如果用户有另一个选项,例如("C987") ,那么需要修改上面的代码,当代码很长的时候,修改代码是难于维护的
- 我们如何保证代码的正确性,这个代码只有程序员能够看到,真正的使用者,业务人员无法看到这个代码
- 很多应用程序有相同的业务逻辑,如果某个业务改变了,如何保证其他业务逻辑的一致性
- 业务逻辑能否不合java语言绑定?
- 业务逻辑能否用其他的脚本语言。
Java下的规则引擎标准就是JSR94,它的实现主要有Jess Jena Drools
Drools中,一个典型的业务逻辑的配置,如下
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">
java.lang.Object
java.lang.String
net.firstpartners.rp.StockOffer
public void printStock(
net.firstpartners.rp.StockOffer stock)
{
System.out.println("Name:"
+stock.getStockName()
+" Price: "+stock.getStockPrice()
+" BUY:"
+stock.getRecommendPurchase());
}
stockOffer.getRecommendPurchase() == null
stockOffer.getStockPrice() < 100
stockOffer.setRecommendPurchase(
StockOffer.YES);
printStock(stockOffer);
一条规则就是rule-set中的rule,如果有很多规则,就要写很多的rule。
上面规则的意思是判断股票价格是否小于100,如果100这个标准改变了,那么只要修改这个规则文件,而不用去修改源代码了
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=815558
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- 关于ROR,PHP,Web应用开发
- 开发web应用之php
- PHP开发大型Web应用浅析
- 程序员的灯下黑:“逗到底”的程序员
- Buildix 构建敏捷开发平台
- 如何设计一个大型的AJAX应用程序
- 互联网协会与IDGVC发布Web2.0 100(附名单)
- 关于栈的弹出函数设计是否应该有两个返回值,一个表示数据,一个表示是否栈为空
- 回应拐拐龙底咚兄弟关于ROR,PHP,Web应用开发
- eXo Platform开始从门户转向Web OS
- 你的团队最佳人数是多少
- 程序员的灯下黑:不要忘记你的目标
- 日广告巨头看上博客 电通ADK合资专投博客
- 并行版本控制的好帮手--WinMerge
- Pku acm 1050 To the Max 动态规划题目解题报告(十六)
- 你的团队最佳人数是多少
- 报告两个CSDN Bugs.