WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 db4o 指南: db4o 中的数据库... 阅读

面向 Java 开发人员的 db4o 指南: db4o 中的数据库重构

 2010-04-01 00:00:00 来源:WEB开发网   
核心提示: db4o 保存旧的数据吗?如果删除一个字段,然后再添加那个字段,面向 Java 开发人员的 db4o 指南: db4o 中的数据库重构(8),db4o 竟然可以找回那个字段当初存在时原有的值,不,使用 db4o Refactoring API 打开已有的数据文件,并更改在磁盘上的名称,db4o

db4o 保存旧的数据吗?
如果删除一个字段,然后再添加那个字段,db4o 竟然可以找回那个字段当初存在时原有的值。不,db4o 不会永远跟踪所有被删除的字段的值 —— 当数据库被请求执行所谓的碎片整理操作时,它就会删除那些值。本系列将来的文章中会更详细地谈到碎片整理,请继续关注。

实际上,db4o 向后兼容的妙法值得解释一下。基本上,当 db4o 看到新类型的字段时,就会在磁盘上创建一个新字段,该字段有相同的名称,但是具有新的类型,就好像它是添加到类中的另一个新字段一样。这还意味着,旧的值仍然保留在旧类型的字段中。因此,通过将字段重构回初始值,总可以 “回调” 旧值,取决于观察问题的角度,这可以说是一个特性,也可以说是一个 bug。

注意,对类中方法的更改与 db4o 无关,因为它不将方法或方法实现作为存储的对象数据的一部分,对于构造函数的重构也是如此。只有字段和类名本身(接下来会进行讨论)对于 db4o 才是重要的。

第三次重构比较困难

在某些情况下,需要发生的重构可能更剧烈一些,例如整个更改一个类的名称(可以是类名,也可以是类所在的包的名称)。像这样的更改对于 db4o 是比较大的更改,因为它需要根据 classname 来存储对象。例如,当 db4o 查找 Person 实例时,它在标有名称 com.tedneward.model.Person 的块的特定区域中进行查找。因此,改变名称会使 db4o 不知所措:它不能魔术般地推断 com.tedneward.model.Person 现在就是 com.tedneward.persons.model.Individual。幸运的是,有两种方法可以教会 db4o 如何管理这样的转换。

更改磁盘上的名称

使 db4o 适应这样剧烈的更改的一种方法是编写自己的重构工具,使用 db4o Refactoring API 打开已有的数据文件,并更改在磁盘上的名称。可以通过一组简单的调用做到这一点,如清单 10 所示:

上一页  3 4 5 6 7 8 9 10  下一页

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接