我们有一个Java应用程序,我们希望为最终用户提供编写“业务规则”的能力。创建,更新或删除实体时将评估这些规则。
我正在寻找一种语言来编写这些业务规则。考虑因素是:
有什么建议吗?
答案 0 :(得分:2)
使用业务规则引擎(如Drools)或使用Groovy或xText构建自己的词汇表或DSL。
答案 1 :(得分:1)
Python可以使英文具有可读性,并且可以作为Jython包用于Java。 Python中的列表语法非常灵活,对于这样的用例,它有很多合成方法。 Jython是完善的项目,已经在业务应用程序脚本中使用。
可以使用JVM内部安全管理器机制在Java级别上提供沙盒。这就是Java applet使用的。
Python有一个名为pylint的语法检查器。
答案 2 :(得分:0)
您也可以尝试ANTLR。它有点复杂,但有很多灵活性。
答案 3 :(得分:0)
您还可以将您的DSL基于XML,JSON,YAML甚至是LISP的s-exp。
一些例子:
使用YAML:
- action: reject
pattern: http://www\.example\.com/.+
- action: allow
pattern: http://www\.example\.net/.+
另一个YAML示例:
- xpath-select: /a[1]/b/c[@p1=v1]/d
as: x
- xpath-select: /e/f/g
as: y
- yield: "${x}+${y}"
使用XML:
<select value="*" from="mytable">
<criteria property="name" op="eq" value="foo" />
<criteria property="age" op="ge" value="18" />
</select>
XML,JSON,YAML是数据格式。您必须自己解释这些数据,但它可以防止创建任意对象。使用众所周知的数据格式也可以减轻您编写自己的解析器的麻烦。 Java中有现有的解析器。