繁体   English   中英

为Java表达式评估器提供通用实现

[英]Providing common implementation for Java expression evaluators

当前,我们在微服务中使用JEXL表达评估器。 但是,我们希望将来能够灵活地将其更改为其他一些表达式评估器。 这里的问题是来自不同供应商的表达式求值器不会从公共接口继承方法。 因此,尽管不同的表达式评估程序确实提供了相似的功能,但它们可能具有不同的方法以及不同的方法签名。 如果我们将来决定更改表达式求值器,如何避免避免更改整个代码库呢? 如果答案中包含实现此方案的示例代码,将很有帮助。

好吧,@ Admx在注释中提到了适配器模式,通常在这种情况下,这是个好主意。 它可以归结为三个步骤:

  1. 编写一个接口,该接口定义您需要表达式计算器执行的操作;

  2. 使用JEXL实现该接口

  3. 将评估程序的创建封装在工厂中,以便您可以随时交换实现。

在这种情况下,这个想法就会出现问题: 表达语言是界面的一部分。

其他任何第三方表达评估器都不太可能实现相同的表达语言。 这意味着,如果将JEXL换成其他东西,则必须编辑需要它评估的所有表达式。

这真的是您期望项目发展的方向吗? 可能不是。

由于不将产品与JEXL捆绑在一起就无法真正使用JEXL,因此您可能只想将JEXL源合并到自己的代码库中,并从那里维护它,就好像它是您自己的一样。 它是Apache许可的,并且不是太大,因此这当然是可行的。 您现在不需要执行此操作,但是如果JEXL最终导致您遇到麻烦,可以选择此选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM