写点什么

案例研究之聊聊 QLExpress 源码 (二)

发布于: 2021 年 01 月 10 日
案例研究之聊聊 QLExpress 源码 (二)

上一篇从官网系统性的进行了功能和背景说明,本篇从架构图方面带你进行下了解

案例研究之聊聊 QLExpress 源码 (一)官网解读

二、架构图

2.1、架构模块

架构模块我们可以根据包名/模块名进行拆解,并标注阅读顺序,方便拆解架构模块并阅读。

2.2、架构分析

从架构图中我们可以看到我们可以大致划分为 3 个区域

  • 指令解析

  • 应用上下文加载内容

  • 组建化自定义化

2.2.1、指令解析

首先我们看下第一块区域,指令解析。



上图中这块部分是否似曾相识,我们回顾下 Java 中是如何编译的?以下是之前我描绘的编译过程的解析步骤的 case 案例。具体的可以参考Java语言的编译原理

假设我们现在需要计算工资总和, 工资总和=薪酬+年终奖,第一步为词法分析,其实就是 token 分解,将每个词进行拆解,而这个拆解依赖于符号表


根据符号表便可以进行语法分析建立抽象语法树,然后进行语义分析,生成指令集合。

QLExpress 在指令解析的时候如 Java 的指令解析类似,会将输入脚本(提前定义好的脚本)->将表达式进行 token 分解->token 解析->AST 文法匹配->最终生产指令集合。这里猜测当时的借鉴思想来源于 Java。

2.2.2、应用上下文加载内容


上下文对象类似 Mybatis 中的全局 configuration,Spring 中的全局 Configuration 上下文所有内容,它可以将上下文内容全部拿到内存中进行读取-分析-计算-结果输出。

2.2.3、组件化自定义化

一个好的框架定义之开始需要保证良好扩展性,以及可以支持外部自定义配置等需求,而这个模块组件化提供了预定义的一些模块功能,也提供了可以外部用户自定义的函数和属性,操作符号来满足自定义化场景需求。


本篇简单的从架构图和模块解析让大家有个简答的入门了解,下一篇将开始阅读源码了!


发布于: 2021 年 01 月 10 日阅读数: 40
用户头像

小胜靠智,大胜靠德 2019.06.27 加入

历经创业、京东、腾讯、滴滴公司,希望能够有些东西一起分享。公众号:小诚信驿站,微信/CSDN搜索:wolf_love666

评论

发布
暂无评论
案例研究之聊聊 QLExpress 源码 (二)