Java: шаблон Builder и логические сгруппированные объекты - PullRequest
3 голосов
/ 09 января 2012

Я прочитал этот вопрос о том, как разбить большие конструкторы в Java. Но я не совсем уверен, что я буду делать в моем случае. Этот вопрос говорит о том, что модель построения является лучшим путем, но в то же время один человек в каком-то под-предложении сказал «только если некоторые параметры являются необязательными». Поскольку все мои параметры являются обязательными, я не вижу преимущества шаблона построения. Я только рискнул бы забыть передать важный мир информации. Следовательно, является ли мой единственный вариант создания новых логически сгруппированных объектов или я упускаю какой-то важный факт в шаблоне компоновщика? Строители кажутся хорошими, только если чего-то не хватает?

Ответы [ 3 ]

2 голосов
/ 09 января 2012

"Поэтому я единственный вариант создания новых логически сгруппированных объектов или я упускаю какой-то важный факт в шаблоне компоновщика?"

Мое мнение:

Да.Использование компоновщика в этом случае не дает дополнительных преимуществ по сравнению с объемом работы, необходимым в абстракции.

Также упоминается в комментариях: если у вас слишком много параметров для объекта, возможно, объект выполняет слишком многомного.

0 голосов
/ 09 января 2012

Многие параметры для конструктора также могут быть признаком слишком большого количества проблем, с которыми сталкивается класс. Строители имеют смысл только при наличии каскадных случаев: для мальчиков добавьте раздел с грубым языком, для девочек - список покупок.

Разделение проблем зависит от наследования, общих параметризованных классов, делегирования классов и более тяжелых логически сгруппированных объектов.

Подумайте также, можете ли вы написать контрольный пример. Разработка, управляемая тестами, полезна здесь. Если затем вам нужно смоделировать класс параметров, для «внедрения зависимостей» потребуется более абстрактный класс параметров.

0 голосов
/ 09 января 2012

Даже если все ваши параметры являются обязательными, шаблон компоновщика по-прежнему имеет несколько преимуществ:

  1. Это более читабельно. Если ваш конструктор имеет десять параметров, это трудно помнить что есть что есть что, особенно если их много 0 или ноль.

  2. Строитель может быть передан нескольким различным методам накапливать данные, которые ему нужны. Это полезно, если некоторые из этих данных существует в одном классе, а некоторые в другом.

  3. Если некоторые из ваших параметров являются списками или другими коллекциями, которые требуют быть собранным перед передачей конструктору, Строитель может позаботиться об этом внутренне. Они также могут устранить некоторые из необходимости защитных копий, так как строитель знает, что он не пропускает ни одного из этих объектов.

  4. Строитель может служить прокси сериализации, давая вам больше контроль над сериализованной формой или формой JAXB XML вашего объект.

Тем не менее, мой подход всегда будет начинаться с простого конструктора и вводить конструктор только в том случае, если вызов этого конструктора вызывает много проблем в вашем коде, а дополнительной ясности, добавленной компоновщиком, достаточно, чтобы оправдать добавление совершенно новый класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...