面向 Java 开发人员的 db4o 指南: db4o 中的数据库重构
2010-04-01 00:00:00 来源:WEB开发网在清单 7 中,我发现数据库中的所有 Person,并随机地为他们赋予 Mood。在更现实的应用程序中,我会使用一组基准数据,而不是随即选择数据,但对于这个例子而言这样做也行。运行上述代码后产生清单 8 所示的输出:
清单 8. 今天每个人的情绪如何?
Setting Brian's mood to BLAH
Setting David's mood to WRITING_AN_ARTICLE
Setting Brian's mood to CONTENT
Setting Jason's mood to PSYCHOTIC
Setting Glenn's mood to BLAH
Setting Neal's mood to HAPPY
Setting Clinton's mood to DEPRESSED
可以通过再次运行 ReadV2 验证该输出。最好是再运行一下初始的查询版本 ReadV1(该版本看上去很像 ReadV2,只是它是在 V1 版本的 Person 的基础上编译的)。运行之后,产生如下输出:
清单 9. 旧版的 ‘今天每个人的情绪如何?’
[Person: firstName = Brian lastName = Sletten age = 38]
[Person: firstName = Brian lastName = Goetz age = 39]
对于清单 9 中的输出,值得注意的是,与我将 Mood 扩展添加到 Person 类(在 清单 6 中)之前 db4o 的输出相比,这里的输出并无不同 —— 这意味着 db4o 是同时向后兼容和向前兼容的。
再度重构!
假设要更改已有类中一个字段的类型,例如将 Person 的 age 从整型改为短整型。(毕竟,通常没有人能活过 32,000 岁 —— 而且我相信,即使真的 有那么长寿的人,仍然可以重构代码,将该字段改回整型。)假定两种类型在本质上是类似的,就像 int 与 short,或 float 与 double,db4o 只是静默地处理更改 —— 同样是或多或少仿效 Java Object Serialization API。这种操作的缺点是,db4o 可能会意外地将一个值截尾。只有当一个值 “转换为范围更小的类型” 时,即这个值超出了新类型允许的范围,例如试图从 long 类型转换为 int 类型,才会发生这样的情况。货物出门概不退货,买主需自行小心 —— 在开发期间或原型开发期间,务必进行彻底的单元测试。
更多精彩
赞助商链接