面向 Java 开发人员的 db4o 指南: 超越简单对象
2010-04-01 00:00:00 来源:WEB开发网OODBMS 系统中的 String
您可能还记得,在我此前的文章示例中,Person 类型使用 String 作为字段。在 Java 和 .NET 里,String 是一种对象类型,从 Object 继承而来,这似乎有些矛盾。事实上,包括 db4o 在内的绝大多数 OODBMS 系统在对待 String 上与其他对象都有不同,尤其针对 String 的不可变(immutable)特性。
这个简单的 Person 类在用于介绍基本 db4o 存储、查询和检索数据操作时行之有效,但它无法满足真实世界中企业编程的复杂性。举例而言,数据库中的 Person 有家庭地址是很正常的。有些情况下,还可能需要配偶以及子女。
若要在数据库里加一个 “Spouse” 字段,这意味着要扩展 Person,使它能够引用 Spouse 对象。假设按照某些业务规则,还需要添加一个 Gender 枚举类型及其对应的修改方法,并在构造函数里添加一个 equals() 方法。在清单 2 中,Person 类型有了配偶字段和对应的 get/set 方法对,此时还附带了某些业务规则:
清单 2. 这个人到了结婚年龄吗?
package com.tedneward.model;
public class Person {
// . . .
public Person getSpouse() { return spouse; }
public void setSpouse(Person value) {
// A few business rules
if (spouse != null)
throw new IllegalArgumentException("Already married!");
if (value.getSpouse() != null && value.getSpouse() != this)
throw new IllegalArgumentException("Already married!");
spouse = value;
// Highly sexist business rule
if (gender == Gender.FEMALE)
this.setLastName(value.getLastName());
// Make marriage reflexive, if it's not already set that way
if (value.getSpouse() != this)
value.setSpouse(this);
}
private Person spouse;
}
更多精彩
赞助商链接