所有項目都是被需求變更累死的,eXtreme Programing提供了一種哲學,一種態度,但更實際的,是那些能夠應付需求變更的技術。
比如用OLAP支持復雜報表的快速定制,用script語言如Groovy支持客戶自定義公式,
還有Rule Engine,我們一天到晚掛在口上的親愛的商業規則。
Rule Engine并不新鮮,但通常只要一些名詞已經足夠把所有普通項目組震退,CLisp、Rete、前向推導.... 惟有Drools,終于把java和xml帶回我們身邊,讓規則引擎簡單到和JSP一樣可以進入所有的程序組。
先看一段精簡又實用的HelloWorld,由兩部分組成, 一個是調用規則的test.jsp :
//設置一個測試用的VO
Vo vo = new Vo();
vo.setPoStatus("A:draft");
//讀入規則
RuleBase ruleBase = RuleBaseBuilder.buildFromURL("rule.drl");
//把vo放入WorkingMemory中并執行
WorkingMemory workingMemory = ruleBase.newWorkingMemory( );
workingMemory.assertObject( vo );
workingMemory.fireAllRules( );
//顯示結果
out.print(po.getPoStatus());
一個是規則文件rule.drl:
<rule-set name="test rules"
<rule name="Bob Likes Cheese">
<parameter identifier="vo">
<java:class>com.ito.vo</java:class>
</parameter>
<java:condition>vo.getStatus().equals("A:draft")</java:condition>
<java:consequence>
vo.setStatus("B:order");
</java:consequence>
</rule>
</rule-set>
整個規則分成三段, 第一段定義剛剛放入的對象; 第二段用Java語法判斷條件; 第三段為條件符合時的執行語句
真的非常簡單吧
經過小范圍的試用,發現沒有這么簡單,因為Drools主要提供了一個RETE的規則匹配算法和一個Script Engine,具體怎么用,還很靠自己。如果drl文件的定義方式和RETE算法能夠使條件的表達大大簡化,那么它就是有用的。否則,一段重構后的代碼能夠達到和drl文件相仿的功能。所以,還是要多看點基礎,把Business Rules用在正確的地方。
提供一個eclipse的插件 url: http://www.zymose.com/index.html