在Drools技术交流群(QQ:679120258)中,有同学相关的规则代码如下:

Drools规则中for循环及break操作问题插图

同学的疑问是:drools规则中,当for循环条件满足时 ,可以使用break吗?

针对这个问题的回答是:可以。因为drools规则脚本中是支持Java语法的。因此理论上是可以使用break。但截图中提到使用break会抛出异常。由于这问同学没有进一步提供异常信息,因此无法进行定位。

针对该问题,本人的回答如下:理论上then部分是支持Java的。抛出异常是什么信息?是否是因为其他地方引起的。另外,可以尝试把for循环定义到function中试试,或者像上面一样,封装成基于global的service方法。

而且你的这个规则好多部分可以进行拆分,拆分成多个规则。理论上then部分是不建议出现if else判断的。比如$dispatch很显然可以直接在then部分进行过滤掉,或搞成两个子分支的规则来处理。

上述的规则设计有不少问题,第一:过于复杂,其实可以将复杂的业务拆分成多个相对原子的规则;第二:then部分还有ifelse判断,这从一定层面上来说规则设计的有问题,比如上面提到的$dispatch。第三:即便then部分的业务比较复杂,也可以考虑通过function或global调用服务的方式来进行处理。

当然,这也只是建议,根据不同的业务场景和情况,灵活使用才是最好的。



Drools规则中for循环及break操作问题插图1

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2020/11/26/drools-for-break/