我有几乎100条规则的规则文件(.drl)。但是我想让用户灵活地选择哪些规则在任何时候都有效。 我在想是否有办法将所需的规则导入到单独的.drl文件中,以便用户可以选择并选择规则
是否可以将一个.drl文件的规则导入到其他.drl文件中?如果不是,我如何确保用户可以选择/选择在任何时候都有效的规则。
在一个文件中也有100个规则是无效的,用单行/名称引用它们是可读的。
提示pl?
答案 0 :(得分:1)
从一个DRL到另一个DRL的规则没有“导入”。
解决问题的方法取决于所需的规则选择粒度。
如果有少量N个静态组合,您可以构建N个规则库并让用户选择规则库。这是干净,可控和可测试的。
如果有多个不相交的集,请使用议程组。用户选择议程组,并且只有该组中的规则处于活动状态。 (如果这些集合不是不相交的,你仍然可以使用议程组,代价是在不同的议程组中使用不同的名称复制规则。丑陋,不推荐。)
对于任意动态选择,您必须设计一些机制。例如:
rule "rule1"
when
Select( name == "rule1" )
All( ... )
Original( ... )
Patterns( ... )
then ... end
插入新的Select(“rule1”)选择,缩回缩回。根据选择的方式,您还可以实现“功能”:
rule "rule x" # part of feature f1 and f2
when
Select( featureSet contains Feature.f1 || Feature.f2 )
All( ... )
Original( ... )
Patterns( ... )
then ... end
您可以编写规则来检查功能组合,例如
rule "feature check"
when
Select( featureSet contains Feature.black && Feature.white )
then
... cant have black *and* white at the same time ...
end