2.5 实现
测试驱动数据库开发
至此,前面描述的方式能够让读者初步地刻画和实例化数据库的类。下面将介绍一些实现一个数据库的类的方法。本书先从总体需求入手,然后提供一个数据库类的伪代码实现,可以将其移植到任何平台上。
2.5.1 需求
让我们来看看一个良好的数据库的类的实例化机制应该是什么样子的。了解这些需求能够让你编写自己的机制,或者当你面对的需求明显不同于本书描述的情况时,可以调整本书建议的机制,从而适应你的具体情况。
我已经确定了4个需求,并用4个以字母C开头的单词来分别描述之,称其为“4C机制”,希望这个词儿能流行起来。
4C机制如下所述,数据库的类的实例化机制必须是完整的(Complete),对于一个特定的版本,该机制执行了所有必要的变更;该机制必须是正确的(Correct),同样的变更从不在数据库上施加两遍;该机制必须是一致的(Consistent),每一次变更的实施,都是以完全相同的顺序来执行;最后,该机制必须是可控的(Controllable),只要想构建一个特定的数据库,读者就一定能够规定一个目标版本来构建之。
2.5.2 数据库实例化机制的伪代码
用可重复的方式来可靠地更新数据库的算法其实出奇地简单。经过多年的完善,至少与开始时搞出的东西相比,我总是惊讶于它是如此地简单。
UpgradeDatabase(<db>, <design>, <target version>)
<current version> = current version of <db>
<required versions> =
versions from <design> after <current version> and up through
<target version>
sort <required versions> in ascending order
for each <version> in <required versions>
execute transition for <version> against <db>
update current version of <db> to version number of <version>
上述伪代码的实现细节将留给读者来完成,但是本书通常用XML文档的形式来表达数据库的设计,并且把已经施加到数据库上的变更版本存储在一个数据库表中。这样,数据库的“当前”版本就能够通过选择该表最近插入的行来推断。
2.5.3 输入的伪代码
上述算法的输入可以是一个XML文件或一些其他格式的文本文件。只要数据库的每一个版本可以被确定下来,被适当地排序,并能在数据库实例进行实例化时声明其所需的步骤,任何格式的输入都是可以的。
为了说明这个问题,下面给读者一段简单的XML,包含了用于构建和升级一个小型数据库的脚本:
<database>
<version id="1">CREATE TABLE FOO(A I NT)</version>
<version id="3">CREATE TABLE BAR(C CHAR(30))</version>
<version id="2">ALTER TABLE FOO ADD B NVARCHAR(20)</version>
</database>
如上所示,XML文件包含了可用来排序、标识和执行SQL语句的所有信息,这些信息用来构建数据库或将数据库更新到任何特定的版本。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。