如果我有一个具有复杂对象树的表单支持对象——比如说一个人,它有一个联系信息对象,一个地址对象有一堆字符串——似乎该对象需要用组件完全填充对象之前我可以绑定到它。因此,如果我要创建一个新的 Person,我需要确保它已经填充了所有组件对象,如果我要从数据库中检索一个 Person,我需要确保所有不是从数据库中填充的对象填充为空对象。
当然,第一个问题——我的上述假设是否正确?似乎如果我尝试绑定到 person.contactInfo.homeAddress.street 并且没有 ContactInfo,我会得到一个空指针异常。
其次,初始化我的对象的最佳方法是什么。我可以想到几种方法。一种是在声明时初始化所有成员对象:
public class Person {
String name;
ContactInfo contactInfo = new ContactInfo();
//getters, setters, etc.
}
public class ContactInfo {
String phone;
Address homeAddress = new Address();
}
等等。
另一种方法是拥有一个初始化所有内容的 PersonFactory(或拥有一个初始化所有内容的工厂方法 Person.getInstance)。
在从数据库中检索人员的情况下,第一种方法将解决问题(即,如果此特定人员在数据库中没有地址,则该对象仍然有一个地址),但这意味着创建每个对象两次。不知道如何处理这个问题,除了让 DAO 显式填充所有内容,即使没有从数据库中检索到任何内容。或者给工厂一种方法来遍历对象并“填充”任何缺少的东西。
建议?