2010-06-14 29 views
7

以下是我想要做的事情。在动态决策表中使用drools专家

我想将“规则”放在数据库表中。这有点像drools xls决策表格式,只是所有规则都是表格中的行。这样我可以轻松修改规则。我需要把它放在一个表格里,而不是一个xls,因为我的规则可能会经常变化。这可能与流口水?我可以使用从数据库检索的规则(而不是DRL或xls文件)创建知识库,每次规则更改时,我都可以从头开始重建知识库(或者只是知识库的一部分,本质上只更新那些已更改的规则..)

回答

6

这取决于你想要什么样的规则。数据库支持的方法是有意义的,如果你有很多具有相同结构的规则,并且只根据某些“参数”而有所不同。在这种情况下,您可以编写单个通用规则,并使用数据库来存储所有适用的组合。例如,假设您有一个规则来计算每个国家/地区的运费,例如订单

rule "Shipping rates to France" 
when 
    $order : Order(country == 'fr') 
then 
    $order.setShippingRate(10.0); 
    update(order); 
end 

// Similar rules for other countries… 

其中每个CountryShippingRate指定一个国家的房价可能会取代从数据库中这些规则的数据。然后,你插入所有CountryShippingRate行作为规则会话事实对象,单一规则,如:

rule "Shipping rates" 
when 
    $order : Order($country : country) 
    CountryShippingRate($rate : rate, country == $country) 
then 
    $order.setShippingRate($rate); 
    update(order); 
end 

在实践中,事实证明,很多的决策表型规则可以写成这样。

+1

我希望我可以upvote 10次:) – 2011-06-30 04:27:59

+0

@Peter Hilton请看看这个问题。谢谢 http://stackoverflow.com/questions/26322576/stop-rules-on-update-facts-drools – Kumar 2014-10-12 07:35:03