美文网首页
不成熟思考:表达式引擎

不成熟思考:表达式引擎

作者: elon_wen | 来源:发表于2020-12-04 09:32 被阅读0次

对“引擎”二字的误解

引擎的本质

看了所谓的各种引擎,本质上只是为了解决一件事:能够在运行时,动态的走不同逻辑。

怎么解释呢?因为Java是静态的,代码写完了逻辑就不能调整了。比如对于两个金额,一会你想执行a+b,一会你想执行a-b,要怎么办呢?有人说你可以把运算符和a/b传给后端啊。那如果是a+(b-c)/d呢?

与其把这玩意拆开,还不如直接一个字符串丢给后端,后端爱咋玩咋玩。所以,所谓的表达式引擎就诞生了。

引擎的动机

为什么要这么做呢?很大一部分原因,是因为在简单场景下,可以让引擎的用户,(比如运营,风控)而不是让程序员来查看,并且决定(修改)业务流程。毕竟这件事情做业务的同学更专业,你老给人翻译业务需求也没什么价值。

这里为啥强调简单两个字,是因为很多自研的表达式引擎之粗制滥造,甚至连最简单的自定义函数的能力都没有,更不要说去实现异常处理、类型检查、高阶函数等等特性以及各种调优。

有些引擎作者会告诉你,我不需要这些,这个时候,如果你反问一句为什么不需要?
大概率他会楞了一下,然后开始闪烁其词。

正是因为大家对于引擎,想的太少,所以太多时候,这东西被设计成了一个表达式求值器。就是那种数学运算,加上if/else,可能前端再套一个基于antlr的解析器,就算成品了。

(作者甚至连什么叫BNF都不知道,因为好像他不需要知道啊。)

如果只是这样,Groovy难道它不香吗?

为什么通用化无法根本解决业务问题?

先回答上一个问题,Groovy它香,但是作为一门通用语言,它的业务表达能力太弱了。

所谓的语言表达能力,大家可以对比下对于按条件过滤并求和之流,用Java或者SQL来实现,代码的简洁性可以差多少。

SQL写的短,并不代表SQL有什么牛逼的,而是我们在用一种不公平的视角在比较。否则的话我可以反过来问,你能用SQL写个Web服务器么?

正是因为SQL本质上不是一门通用语言,因此,在特定领域,它的威力要远远大于Java。

说来说去,终于说到了正题上,一门通用的语言,并不能解决复杂业务场景下透出业务逻辑的问题,因为表达能力太弱,唯一能做的,无非是把开发人员的负担转嫁到了用户身上。

而且,你做一门语言,Debug不行,也没个IDE,就让人对着一个文本框在那写,这不是耍流氓是什么?

为什么会有这样的问题?

说到底,是有些人对于业务的理解过于浅薄了,或者说我真的就是想解决那一点点加减乘除的问题,(大概C语言课后习题的难度?),都觉得我可以在不理解业务的大背景下,做一个非常通用的工具,给很多人来使用。工具有多通用,就有多薄,就有让业务用起来有多痛苦。再说一句,Groovy它不香么?

虽然本质上,大家都想要让业务来决定业务逻辑,而且从一个业务无关的通用语言演化,确实也没有问题。真正的问题在于,工具的设计者,有没有深入理解过业务,并且带着一颗比较尊重业务的心来设计你的系统。而不是动不动就是,你这样的设计违背了我的初衷,我是要做通用引擎,不能给你做订制,你要follow我的标准。

引擎的护城河

业务的厚度

技术的深度

相关文章

  • 不成熟思考:表达式引擎

    对“引擎”二字的误解 引擎的本质 看了所谓的各种引擎,本质上只是为了解决一件事:能够在运行时,动态的走不同逻辑。 ...

  • 模板引擎原理

    # 模板引擎 ## 原理 ![模板引擎原理](F:\前端学习资料\模板引擎原理.jpg) ## 使用到的正则表达式...

  • 无标题文章

    # 模板引擎 ## 原理 ![模板引擎原理](F:\前端学习资料\模板引擎原理.jpg) ## 使用到的正则表达式...

  • JS 正则表达式实例

    JS的正则引擎使用的是NFA引擎 匹配机制: 从位置0开始,按照表达式的单个子表达式规则来进行匹配 匹配在表达式和...

  • 正则表达式的回溯机制

    正则表达式的引擎分析 正则表达式的引擎有两个特点:1.默认情况下都是贪婪匹配。2.引擎总是着急的,会返回最先匹配到...

  • 常用规则引擎

    一. Drools规则引擎 简介: 特性: 3.原理: 二.Aviator表达式求值引擎 简介: 特性: 整体结构...

  • 正则表达式优化

    正则表达式优化——《精通正则表达式》总结 [TOC] 第4章:表达式的匹配原理 引擎 DFA (Determini...

  • Python正则表达式(一)

    前言 正则表达式(Regular Expression),就是具有一定规则的表达式。通过正则表达式引擎,将这些规则...

  • 正则表达式规则

    正则引擎的具体实现有很多,都能支持正则表达式的解析。虽然正则表达式的原理是一样的,但是不同的正则引擎支持的正则表达...

  • 正则表达式快速入门

    正则表达式的引擎分为三种:NFA、DFA、POSIX NFAJavaScript 使用的是 NFA 的正则表达式引...

网友评论

      本文标题:不成熟思考:表达式引擎

      本文链接:https://www.haomeiwen.com/subject/uyybwktx.html