Drools中的其他条件

时间:2014-04-11 07:25:47

标签: java drools

尝试将Drools规则实现到我的项目中,并尝试将大量if-else转换为drools规则,但我不确定如何将else条件置于drools中。我的情况是这样的:

if(value.equals("java.lang.Integer")) {
   //Put value into pojo
} else if(value.equals("java.lang.Float")) {

} 
// Similar if-else for other data type
else {
  //Do some action (if it doesn't satisfy all other condition)
}

我目前的drl文件内容是这样的:

rule "When Method Parameter is java.lang.Integer"
   when
       object.getValue().eqals("java.lang.Integer")
   then
       #Set value to another pojo
end

rule "When Method Parameter is java.lang.Float"
   when
       object.getValue().eqals("java.lang.Float")
   then
       #Set value to another pojo
end

rule "Rules if all of the above condition fails"
    # is it possible to have rule just like else, if all
    # of above condition fails, this rule should execute
end

现在我想要一个条件,如果以上所有条件都失败,应该执行该条件。使用drools可以做到这一点吗?如果所有上述条件都失败,那么其他部分应该执行,我尝试搜索并发现当前drools不支持else条件。如果是这种情况,我该如何实现这种情况?任何人都可以指导我,因为我是初学者流口水。

2 个答案:

答案 0 :(得分:1)

我称之为“分类”的设计模式有所不同。请参阅我的设计模式论文https://engage.redhat.com/forms/rule-design-patterns

由于规则 - 如你所示 - 在语法上绝对不正确,我不想在不知道真正需要做什么的情况下提出建议 - 我可以想象几个选项,甚至可以想到几个规则。

答案 1 :(得分:0)

最接近模型的方法可能是激活组。使用激活组时,该组中只会触发一个规则。因此,通过创建一个具有较低显着性的附加规则(不限制该值),如果组中的其他规则都没有触发,则会触发。

您还可以创建一个规则,该规则与其他规则使用的模式的否定相匹配,或者您可以在RHS上只有一个带有if-then-else的规则。你不应该因为它感觉不到“纯粹”而排除最后一个。根据您的具体情况,这可能只是最干净的方式。