目前,我们在微服务中使用JEXL表达式求值程序。但是,我们希望将来能够灵活地将其更改为其他表达式评估程序。这里的问题是来自不同供应商的表达式评估程序不从公共接口继承方法。因此,不同的表达评估器可以具有不同的方法以及不同的方法签名,尽管它们确实提供了类似的功能。如果我们决定在将来更改表达式求值程序时,如何以避免更改整个代码库的方式来解决此问题?如果答案包含实现此方案的示例代码,将会很有帮助。
答案 0 :(得分:1)
嗯,@ Admx在评论中提到了适配器模式,通常在这种情况下这是一个好主意。它归结为三个步骤:
编写一个界面,定义表达式评估程序需要执行的操作;
使用JEXL
在工厂中封装评估者的创建,以便您可以随时交换实施。
在这种情况下,这个想法存在一个问题:表达式语言是界面的一部分。
任何其他第三方表达式评估程序都不太可能实现相同的表达式语言。这意味着如果您将JEXL替换为其他内容,那么您必须编辑您需要评估的所有表达式。
这真的是你期望你投射的方向吗?可能不是。
由于您无法在不将产品绑定到JEXL的情况下真正使用JEXL,因此您可能只想将JEXL源合并到您自己的代码库中,并从那里维护它,就好像它是您自己的一样。它是Apache授权的而不是太大,所以这当然是可行的。您现在不需要这样做,但如果JEXL最终导致您遇到麻烦,您可以选择这个选项。