JBoss Rule Engine - Drools (1)

news/2025/2/26 17:27:54

[緣起]
上次和 JBoss Ben Wang 閒聊時, 因為不知道 JBoss Rule Engine - Drools 而被嘲笑了一下,
可能從未實際接觸過 Rule Engine 的領域, 所以就只能馬上查閱資料惡補...

[RuleEngine]
當今技術前端應用應該就屬 ajax 最火紅, 加上 MVC Framework 的整合, 應該就可以快速處理許多系統.
而後端技術應用就屬 Hibernate, EJB3(JPA) 最熱門, 可以利用 ORM 與資料庫溝通.
而中間層商業邏輯段, 我們常常需要 if else 的應用,
如果硬寫太多規則在裡面, 會造成程式面過於龐大難以維護.
以往, 在我設計多彈性的系統之中, 讓模組可 "嵌入" 到我的平台,
我大多採用先設計 BizInterface 再利用 Object.newInstance(); 去進行商業處理.
但是很多例外規則時, 我就得在平台之中, 不斷地寫例外狀況..
或是不斷修正 BizInterface 與 input/output 參數,
這應該是大家不願意樂見的情況 !

所以, 我們先來知道, 什麼情況你需要 Rule Engine, 就是不斷在寫例外的流程,
不斷有 if else, 不斷有特殊規則, 不斷有他媽的需求變更....
換句話說, 如果你有規則引擎在系統之中,
可以減少一些負擔.


if ( areaCode.equals( " A " ||  areaCode.equals( " B " ) )  {
 
if( regionCode.equals("A1"|| regionCode.equals("B2"{
  
if( officeCode.equals("A12F") ) {
   
// show detail data

  }
 else {
   
// show basic data
  }


 }
 else if ( regionCode.equals("B1")) {
  
// show B1 Data
 }
 else {
  
// don't show any data
 }

}
  else   {
 
// do some other business logic
}

 

例如上面的這段程式碼, 我哪知道 A 代表啥意思, 為什麼 A12F 要顯示 Detail data,
雖然可以倚靠著 SA/SD 文件, 但這種程式的可讀性相對低,
自然沒有辦法做到 "易於維護" ! 撰寫這段程式碼的工程師, 更需要花相同的時間去撰寫 UnitTest,
來證明自己的程式碼結果是正確的, 如果換了下一個客戶, 是否又得花相同時間,
去撰寫這些 code 的特殊邏輯 ? 所以有太多理由, 我們不適合在程式中寫太多的 if else.

在 JSR 94 ( http://www.jcp.org/en/jsr/detail?id=94 )規範中 ( 2004/08 Final Released )
就是定義 Java Rule Engine API,
相容的有如 Jess ( http://herzberg.ca.sandia.gov/jess/ ),
JLisa( http://jlisa.sourceforge.net/ ),
Jena ( http://jena.sourceforge.net/ ),
JRuleEngine ( http://jruleengine.sourceforge.net/ ),
以及 benwang 叫我學習的 JBoss Rules - Drools ( http://labs.jboss.com/jbossrules/docs ) 等
其實 Java 的 Rule Engine 之多, 上網亂查都有一大票,
不過, Jess 不算 Opensources, 另外我考量的還有幾點, 包含了 IDE 開發與 XML 規則.

如果有 Eclipse Plugins 的話, 撰寫 Script 應該就會更容易,
另外 能夠遵循 RuleML 就會更好了 ( http://www.ruleml.org/ ),
Mandarax ( http://mandarax.sourceforge.net/ ) 就是採 RuleML 規則的.
畢竟, 我會希望如果我今天用 Drools,
也許明天會考慮 ILog JRules (http://www.ilog.com/products/jrules/) 或是
PST ( http://www.pst.com ) 都可以利用所產生出是相同的定義檔.

 


[References]
http://blog.vgod.tw/?p=86
http://www.manageability.org/blog/stuff/rule_engines/
http://www.onjava.com/pub/a/onjava/2005/08/03/drools.html
http://www.onjava.com/pub/a/onjava/2005/08/24/drools.html
http://labs.jboss.com/jbossrules/docs/index.html 





http://www.niftyadmin.cn/n/3653843.html

相关文章

(转)Java IDE 之Netbeans篇

NetBeans 5.5: 首先来看NetBeans 5.5,NetBeans 5.5的基本信息如下表: Vendor:Sun Microsystems   Website:www.netbeans.org  Price:Free/Open source  Distribution:Base EnterprisePac…

修改MySQL的时区,涉及参数time zone

首先需要查看mysql的当前时区,用time_zone参数mysql> show variables like %time_zone%; --------------------------| Variable_name | Value |--------------------------| system_time_zone | CST || time_zone | SYSTEM |--------------------------2 r…

MySQL root密码重置报错 mysqladmin connect to server at 'localhost

-- -- mysqladmin: connect to server at localhost failed的解决方案!-- 1 登陆失败,mysqladmin修改密码失败[rootmysql var]# mysqladmin -u root password 123456mysqladmin: connect to server at localhost failederror: Access denied for user rootlocalho…

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(500W单表)

测试缘由一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了说服他,所以…

从google搜索量走势分析IDE未来走向

下图是笔者最近通过google网上的google trends功能搜索netbeans,eclipse,JBuilder以及交叉搜索得到的一些图表:图一 (netbean搜索量和新闻引用量趋势率)图二  (eclipse搜索量和新闻引用量趋势率)图三  (jbuilder搜索量和新闻引用量趋势率)…

ORACLE11g ORA-12514 TNS 监听程序当前无法识别连接描述符中请求的服务

1、TNS连接错误同事跟我说连接oracle数据库报错ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务,如下所示:2、查看本地TNSPING查看本地的tns配置:WXX (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.121.58…

(编辑整理) NetBeans vs Eclipse 之性能参数对比

这两款JAVA IDE都是一流的开源软件,那么对于广大的JAVA学习者及开发人员来说,那款更适合自己呢?本文通过图文对这两款软件进行多方面的分析比较,仅供参考之用,以期让广大的JAVA学习者少走弯路而已。1. 简介NetBeans:在…

Sqlite -- Java使用jdbc连接Sqlite数据库进行各种数据操作的详细过程

引:1, Sqlite在Windows、Linux 和 Mac OS X 上的安装过程2,嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录3,嵌入式数据库事务理解以及实例操作4,数据迁移备份--从低版本3.6.2到高版本3…