面向 Java 开发人员的 db4o 指南: db4o 中的数据库重构
2010-04-01 00:00:00 来源:WEB开发网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 所示:
更多精彩
赞助商链接