go database/sql 源码分析(一)sql包设计哲学

hittata · · 1812 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

database/sql设计哲学非常优雅,但是内部实现又非常复制,本节从顶层来去分析下database/sql的实现思想

对上层应用提供一个标准的API


对驱动层定义一个标准接口层
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用

应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API


三大功能
在内部实现一个连接池
内部通过锁实现并发访问的安全性

内部实现数据类型的自动转换


驱动层实现的接口和应用层的调用接口几乎一模一样
使应用程序调用者和驱动的实现者看到的接口视角的一致性

则也算一种编程哲学:增强功能但是调用接口不变,一般的理解是增强功能要增加接口,但是sql包的实现几乎没有增加太多的调用接口而实现功能增强


把复杂功能放在sql包内部实现
并发的安全性支持
连接池的管理

为访问DB提供一个抽象体,看不到连接,连接完全在内部实现中隐藏了


编程哲学
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
 记录到文件
 记录到DB

 写到网络


session管理
 存放在内存
 存放在DB

 存放在文件


程序配置
 各种配置文件
 DB

 其他中间件


面向组合的编程
sql包中定义数据结构组合了driver层的接口变量和内部数据元素

这种可以看作golang独有的组合编程模式


分层实现
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:hittata

查看原文:go database/sql 源码分析(一)sql包设计哲学

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1812 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传