Drools:语言表达式:改进的数据获取方法

 

语言表达式:改进的数据获取方法

作者: Edson Tirelli

大多数人都知道,Drools4.0的一个主要目标是增强表达式的能力,并简化规则语言。

对于大家所期待的常用语言表达方式,我们高兴得说,在4.0MR3版本中这个特性已经完成了,新的改变允许嵌套访问,映射和数组的标准访问语法,以及复杂的表达式评估。换句话说,用户现在可以编写约束如下:

rule "Complex expressions"
when
$country : Contry( name == "Brazil" )
Person( address['business'].phone[0].contryCode == $country.phone.countryCode )
then
// do something
end

在上面的规则中‘address’是一个对象映射,关键字'business'一个Address对象(POJO)相连,它包含了一个Phone对象(POJO)数组,我们要访问的是这个数组的第一个Phone对象的CountryCode属性

这意味着用户不再需要担心扁平对象模型的建模了吗?

Does that mean that users are not required to worry about modeling flatter object models anymore?
实际情况不是这样。为了能够发挥规则引擎的最大能力,我们仍然建议用户必须使用一个关系对象模型。虽然我们提供上面的功能以允许在关系模型无法与整个应用设计相适应时,有另一种好的选择。


要特别理解的是,对于上面的表达式来说被转换到inline-evals()**,因此他们必须要保持数据不变以避免不可预期的行为。同样也要注意的是它不能shadow(投影)整个对象图,同样当factworking memory期间,需要保证约束属性不被改变。


**
: 4.0,我们调整了一个术语,在3.0.X中被称为predicate(断言)的术语,现在在4.0中被称为"inline-eval(内嵌求值)" 。改变的原因是,我们不久将支持另一个被称为predicate(断言)解释。


Drools
开发组

你可能感兴趣的:(Drools:语言表达式:改进的数据获取方法)