Конструктор со многими необходимыми параметрами

1

Если у меня есть конструктор для неизменяемого объекта, который требует нескольких параметров [4+), имеет ли один конструктор со всеми необходимыми параметрами правильный подход?

Я чувствую, что это становится кандидатом на шаблон Builder, но я также чувствую, как уклоняться от него, поскольку параметры требуются, и Builder кажется более подходящим, когда вы выбираете и выбираете.

Примером, на мой взгляд, является объект модели, который не изменяется после создания.

  • 2
    Подходят ли какие-либо параметры естественным образом как часть чего-то большего? (Например, если у вас есть «FirstName, LastName, Address1, Address2, Address3», то это звучит так, как будто вы действительно «Name» и «Address».)
  • 0
    Если у вас всегда есть эти параметры, определенные во время создания объекта, то я не вижу проблемы с одним конструктором.
Показать ещё 2 комментария
Теги:
model
constructor
parameters
builder

2 ответа

4
Лучший ответ

Как вы полагаете, оба варианта имеют свои недостатки. Конструктор с четырьмя аргументами сложно использовать правильно и делает код трудным для чтения. Однако он сообщает, что все параметры являются обязательными.

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

Поскольку код чаще читается, чем написан, я рекомендую использовать опцию, которая повышает читаемость в этом случае. Перейдите к строителю и убедитесь, что все параметры проверены, когда метод build() вызывается как можно быстрее при неправильном использовании построителя. Используйте javadoc, чтобы помочь сообщать, что все параметры являются обязательными.

3

Если вы хотите создать неизменяемый объект, вам необходимо предоставить конструктор со всеми необходимыми полями.

Вы не можете установить состояние частично, как позже, вам нужно будет добавить понятие "сеттеры", которое по определению добавит изменчивость.

Шаблон Builder действительно касается частичного создания объектов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню