4

作为 Drools 的新手,我对 mvel 和 java 方言之间的差异以及使用它们的相对优缺点感到困惑。

经过一些初步研究,我在这里这里遇到了一些讨论。

除了语法糖之外,还有哪些其他区别以及在 java 上使用 mvel 的额外好处是什么?

谢谢。

4

1 回答 1

10

MVEL 是一种 Apache 许可的强大表达式语言 (EL),用 Java 编写,用于基于 Java 的应用程序,因此其语法与 Java 非常相似。

  • MVEL 表达式简洁,语法易于理解。
  • Apache drools 使用 MVEL 模板进行动态代码生成。
  • MVEL 发动机性能优于其他 EL 发动机。

考虑一个例子。

    rule "validate holiday" 
    dialect "mvel"
    dialect "java"
    when
        $h1 : Holiday( month == "july" )
    then
        System.out.println($h1.name + ":" + $h1.month);
    end

方言“mvel”的目的是指向普通旧 Java 对象 (POJO) 类的变量的 Getter 和 Setter。考虑上面的示例,其中使用了 Holiday 类,并且在圆括号(括号)内使用了“月”。因此,借助方言“mvel”,可以访问变量“month”的 getter 和 setter。

方言“java”用于帮助我们在规则中编写 Java 代码。对此有一个限制或特征。我们不能在规则的“when”部分使用 Java 代码,但可以在“then”部分使用 Java 代码。

我们也可以声明一个不带 $ 符号的引用变量 $h1。对此没有任何限制。变量前加$符号的主要目的是为了标记POJO类的变量和Rules的区别。

于 2017-03-03T12:07:31.053 回答