尝试将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
条件。如果是这种情况,我该如何实现这种情况?任何人都可以指导我,因为我是初学者流口水。
答案 0 :(得分:1)
我称之为“分类”的设计模式有所不同。请参阅我的设计模式论文https://engage.redhat.com/forms/rule-design-patterns
由于规则 - 如你所示 - 在语法上绝对不正确,我不想在不知道真正需要做什么的情况下提出建议 - 我可以想象几个选项,甚至可以想到几个规则。
答案 1 :(得分:0)
最接近模型的方法可能是激活组。使用激活组时,该组中只会触发一个规则。因此,通过创建一个具有较低显着性的附加规则(不限制该值),如果组中的其他规则都没有触发,则会触发。
您还可以创建一个规则,该规则与其他规则使用的模式的否定相匹配,或者您可以在RHS上只有一个带有if-then-else的规则。你不应该因为它感觉不到“纯粹”而排除最后一个。根据您的具体情况,这可能只是最干净的方式。