Если у меня есть объект поддержки формы, который имеет сложное дерево объектов - скажем, Person, у которого есть объект Contact Info, у которого есть объект Address, который имеет несколько строк - кажется, что объект должен быть полностью заполнены компонентами объектов, прежде чем я могу связать с ним. Поэтому, если я создаю нового 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, который инициализирует все).
В случае извлечения Person из базы данных, первый подход решит проблему (т. Е. Если этот конкретный человек не имеет адреса в базе данных, объект все равно будет иметь Address), но это будет означать создавая каждый объект дважды. Не уверен, как справиться с этим иначе, за исключением того, чтобы DAO явно заполнял все, даже если ничего не было получено из базы данных. Или дать фабрике способ пройти через объект и «заполнить» все, что отсутствует.
Предложения