我有一种情况,每种产品我都有不同的规则。
因此,每个产品我将有1个drl。
因此,据我所知,我有一个选择:
然后让Drools使用产品的ID匹配正确的规则。
when
avs : AvailabilityStatus( available == true, quantity <= 50, productId = 7899 )
then
avs.setDiscountRate("0.65");
end
在我的网络应用中,每个请求都需要对产品规则进行新的评估。
我不知道哪种方法更有效。
答案 0 :(得分:2)
KnowledgeBase是一个非常非常昂贵的实例化对象,所以每次需要评估规则时我都不会创建一个。
我认为你提到的第一种方法更好(将所有规则都纳入一个drl)。这也使得选项可以在各个产品之间执行规则(想象一下,如果您想要添加价格规则,并且想要建立买2,获得第3个免费)。
还有第三种方法,您可以在每个产品中使用一个drl,但是您可以在同一知识库中加载所有产品。这类似于sigle responsibility principle,但适用于规则。
答案 1 :(得分:2)
如果您需要根据您的产品编写规则,您可能有多个规则具有相同类型的LHS且只有参数更改,例如
when
avs : AvailabilityStatus( available == true, quantity <= 50, productId = 7899 )
then
//update
然后您可以考虑使用决策表。 Drools可以自己生成规则。 As stated in users guide
答案 2 :(得分:0)
我建议您只创建一个知识库并将二进制包存储在文件系统中。如果要添加新规则,请重新生成二进制包。不要为每条规则创建一个drl,这没有任何意义。 干杯