面向 Java 开发人员的 db4o 指南: db4o 中的数据库重构
2010-04-01 00:00:00 来源:WEB开发网清单 11. TypeAlias shuffle
import com.db4o.config.*;
// ...
TypeAlias fromPersonToIndividual =
new TypeAlias("com.tedneward.model.Person", "com.tedneward.persons.model.Individual");
Db4o.configure().addAlias(fromPersonToIndividual);
当运行时,db4o 现在将查询数据库中的 Individual 对象的任何调用识别为一个请求,而不会查找存储的 Person 实例;这意味着,Individual 类中的名称和类型应该和 Person 中存储的名称和类型类似,db4o 将适当地处理它们之间的映射。然后,Individual 实例将被存储在 Person 名称之下。
更多重构方法
我还没有谈到 db4o 支持重构的所有方法,也就是说还有很多要学的东西。即使您发现 db4o 的重构选项不能很好地处理自己的情况,也仍然有旧的后备选项可用,您可以在要求的位置用一个临时名称创建新类,编写一些代码从旧类创建新类的对象,然后删除旧的对象,并将临时类重新命名为适当的名称。
结束语
由于对象数据库中的模式就是类定义本身,而不是采用不同语言的单独的 DDL 定义,因此本文中的每个重构例子都显得简单很多。db4o 中的重构是使用代码完成的,常常可以通过一个配置调用来确定,最坏情况也只不过是编写和运行一个转换实用程序,以将已有实例从旧的类型更新为新的类型。而且这种类型的转换对于几乎所有生产中的 RDBMS 重构都是必需的。
db4o 强大的重构能力使之在开发期间非常有用,因为在开发期间,正在设计的很多对象仍然是变化无常的,即使不需要每个小时都重构,至少也需要每天都重构。如果将 db4o 用于单元测试和测试驱动开发,则可以节省大量更改数据库的时间,如果重构只是简单的字段添加/删除或类型/名称更改,这一点就更加明显了。
这就是本文讨论的内容,但是请记住:如果要用对象编写应用程序,并且持久性存储实际上 “只是和实现有关”,那么为什么非得把很好的对象限制成规规矩矩、四四方方的样子呢?
本文示例源代码或素材下载
更多精彩
赞助商链接