Bootstrap

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

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

二、架构图

2.1、架构模块

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

2.2、架构分析

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

  • 指令解析

  • 应用上下文加载内容

  • 组建化自定义化

2.2.1、指令解析

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

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

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

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

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

2.2.2、应用上下文加载内容

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

2.2.3、组件化自定义化

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

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