database/sql设计哲学非常优雅,但是内部实现又非常复制,本节从顶层来去分析下database/sql的实现思想
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用
在内部实现一个连接池
内部通过锁实现并发访问的安全性
使应用程序调用者和驱动的实现者看到的接口视角的一致性
并发的安全性支持
连接池的管理
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
记录到文件
记录到DB
存放在内存
存放在DB
各种配置文件
DB
sql包中定义数据结构组合了driver层的接口变量和内部数据元素
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合
对上层应用提供一个标准的API
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用
应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API
在内部实现一个连接池
内部通过锁实现并发访问的安全性
内部实现数据类型的自动转换
使应用程序调用者和驱动的实现者看到的接口视角的一致性
则也算一种编程哲学:增强功能但是调用接口不变,一般的理解是增强功能要增加接口,但是sql包的实现几乎没有增加太多的调用接口而实现功能增强
并发的安全性支持
连接池的管理
为访问DB提供一个抽象体,看不到连接,连接完全在内部实现中隐藏了
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
记录到文件
记录到DB
写到网络
存放在内存
存放在DB
存放在文件
各种配置文件
DB
其他中间件
sql包中定义数据结构组合了driver层的接口变量和内部数据元素
这种可以看作golang独有的组合编程模式
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合
有疑问加站长微信联系(非本文作者)