Какова наилучшая практика использования шаблона Builder в "глубоких" иерархиях объектов? Чтобы разработать, я исследовал идею применения шаблона Builder, предложенного Джошуа Блохом, к моему XML-привязному коду (я использую SimpleXML, но этот вопрос применим ко всем случаям). Моя иерархия объектов - это 4 уровня в глубину, с различной степенью сложности. Под этим я имею в виду, что на некоторых уровнях у меня есть только несколько свойств для моих объектов, тогда как на некоторых других уровнях у меня есть до 10.
Итак, рассмотрим этот гипотетический пример (для краткости я оставляю аннотации Simple XML)
public class Outermost {
private String title;
private int channel;
private List<Middle> middleList;
}
class Middle{
private int id;
private String name;
private boolean senior;
/* ... ... 10 such properties */
private Innermost inner;
}
class Innermost{
private String something;
private int foo;
/* ... Few more of these ..*/
}
Если бы я хотел принудительно создать создание объекта Outermost
с помощью сборщиков, какой был бы лучший способ сделать это? Наиболее очевидным ответом является наличие классов inner static Builder
для каждого из указанных классов.
Но неужели это не делает вещи такими же громоздкими, как сама проблема, которую пытается создать шаблон Builder? Я думаю о таких вещах, как: это обеспечит подход "наизнанку" - это значит, что объект Innermost
должен быть полностью сконструирован и создан, прежде чем его можно будет добавить к объекту Middle
. Но все мы знаем, что на практике (особенно когда вы строите XML или JSON), мы редко получаем "своевременную" информацию для этого.
Скорее всего, каждый будет иметь переменные для каждого свойства - на всех уровнях; и создать объекты в самом конце. ИЛИ, в итоге у вас будет Builder для нескольких уровней, плавающих в коде, добавляя к путанице.
Итак, любые идеи о том, как изящно выполнить это?