动态构建表-构建者模式+解析器模式
内容一:框架结构分析
注意:将SQL语句转为对象方式设计,并且构建。
模式一:核心模式:构建者模式=>构建SQL
模式二:辅助模式:解析器模式=>解析SQL语句(文法)
例如: 我是一个屌丝。 我是一个军人。 我是一个程序员鼓励师。 语文:"我"叫做主语,“是”叫做谓语,“屌丝”叫做宾语。语文当中“主谓宾”结构,这样的一种结构称之为”文法“。 语文:还有很多文法,“主谓”结构,“主谓宾”结构…
开发:“a + b + c - d”,算术中,“a”、“b”、“c”、“d"称之为终结符。”+"、"-"称之为非终结符,因为他具有逻辑运算,左右两边必须有符号(变量->值),这样的一种结构我们在程序当中称之为”文法“
-
2、角色划分 角色一:抽象表达式 角色二:终结符表达式 角色三:非终结符表达式 角色四:解析器上下文 -
3、SQL语句案例分析,寻找到终结符和非终结符 select id,name from t_user where id = 1
这是一种文法(规律可寻) 抽象表达式:SQL文法(所有SQL语句规范) 非终结符表达式:select、from、where 终结符表达式:id、name、t_user 创建表SQL、插入表SQL、删除表SQL…等SQL语句都是如此… SQL语句规范完全满足解析器模式设计 -
4、具体类角色? 角色一:抽象表达式Expressible、Binding 角色二:终结符表达式String 角色三:非终结符表达式Expression 角色四:解析器上下文Table -
5、学习方法 分析设计思路,如何找到答案? 学习了设计模式(首先一上来就是设计模式分析学习) 第一步:分析框架,使用框架,基本API使用你完全熟悉? 第二步:核心类是哪个?Connection 第三步:分析功能?思考:他的SQL是如何构建? 查看源码你会发现TableBuilder=>对应就是构建者模式 万一没有按规范怎么办? 1、分析该功能场景是什么? 每一种设计模式都有他的对应的场景 2、采用设计模式进行对比? 一个个去套或者尝试
内容二:框架设计实现
1、一般优秀框架都会有一些注视(有助于分析框架设计)
- 🤔思考1:这个数据库目的为了什么?
目的为了构建SQL语句 - 🤔思考2:如何构建呢?数据库表字段,对象属性是如何对应的呢?
当我去翻阅代码时候=>察觉到Binding有个注释:
Binding is a protocol that SQLite.swift uses internally to directly map SQLite types to Swift types.
含义:将SQLite数据库里面表字段映射到Swift中的对象属性,说白了就是将数据库表字段和属性动态绑定
将name = “NSLog”,t_name name=>映射=>t_name 中间映射过程有框架动态完成(动态绑定)
🤔思考3:绑定有方向? 数据库=>映射=>Swift属性:Binding Swift属性=>映射=>数据库:Value->Expressible有个注释:
extensions cannot have inheritance clauses
插入数据=>String=>映射类型->TEXT,验证成立。
2、代码实现=>结构搭建
模式一:核心模式:构建者模式=>构建SQL?
- 1、抽象产品
Expressible(最高层次抽象)=>中文:可表示的具体产品 QueryType、ExpressionType、Value、QueryType、SchemaType、Expression、Table
具体分为以下几类 a类:表达式类型=>具体表达式 b类:数据库操作=>QueryType insert操作、delete操作… c类:基本数据类型=>Value String、Int、Double、Int32、Int64、Bool等…
- 2、构建者TableBuilder
- 3、组装者Table
模式二:辅助模式:解析器模式=>解析SQL语句(文法)
- 角色一:抽象表达式
Expressible Binding - 角色二:终结符表达式
String - 角色三:非终结符表达式
Expression - 角色四:解析器上下文
Table
3、代码实现=>具体实现代码
模式一:核心模式:构建者模式=>构建SQL
- 1、抽象产品Expressible
核心属性:SQL语句,所有的SQL都将汇聚到一个Expressible 例如:将多个Expressible拼接为一个Expressible Expressible = “select * from user where id = 1” 定义一个表达式->Expression - 2、具体产品QueryType、ExpressionType、Value、QueryType、SchemaType、Expression、Table
2.1 第一个:ExpressionType定义 泛型设计 2.2 第二个:Expression定义与实现 2.3 第三个:extension ExpressionType定义与实现 扩展一:构造方法 扩展二:表达式属性->提供默认实现 扩展三:有意思->让ExpressionType定义为Value类型 具体细节就会具体分析 2.4 第四个:Value实现 2.5 第五个:QueryType实现 2.6 第六个:SchemaType实现 扩展 后面讲解具体拼接细节我们回过头来再里里 整个SQL构建过程具体代码流程 2.7 第七个:Table实现 结构OK,课后至少3遍以上
模式二:辅助模式:解析器模式=>解析SQL语句(文法)
- 角色一:抽象表达式
Expressible Binding - 角色二:终结符表达式
String - 角色三:非终结符表达式
Expression - 角色四:解析器上下文
Table SQL转换=>字符串
|