数据库设计思想
数据库设计是很典型的案例,通常我们用它作为学习的样本,在设计中有些模式也会被鉴戒或者被引入其他的领域。首先数据库本身是非常庞大而复杂的概念,跟数据库相关的东西很多,如何在不同类型数据库之间抽象出很好的设计是很难的事情。标准库提供的是 API 设计而不是框架设计,跟数据库相关的框架可能是利用辅助类型快速创建 SQL 语句,读写操作类似 ORM 框架,但是标准库并不会提供这些。任何一种框架都会有很多不同类型组成,它的关系相对来说非常复杂,内部也会涉及大量的动态特征,这些都不是标准库应该承担的责任。
从设计角度来说,实际上是一个倒金字塔结构。底层是汇编语句,它不复杂只是单向操作或者二元操作。在这之上是系统调用,系统调用指定命令、编号和参数,它没有上下文状态。在这之上提供库级别的 Api,它的调用格式与系统调用不一样,API 设计可能是系统调用的包装,也有可能是用户空间的函数类型,理论上也不维持状态,它提供复合类型的调用。
很多编码规范建议标准库不要提供全局设置,Go 在这点上做的并不好,标准库提供了很多默认全局变量,很多严谨的语言不这么做,Go 这种习惯显然是来源于对 C 语言的继承,C 语言因为早期的编程理念有这样的痕迹,新的语言其实很少这样做。在这之上提供框架级别的 API,维持状态。对于标准库来说它提供的是库级别的 API,它不提