Если у меня есть конструктор для неизменяемого объекта, который требует нескольких параметров [4+), имеет ли один конструктор со всеми необходимыми параметрами правильный подход?
Я чувствую, что это становится кандидатом на шаблон Builder, но я также чувствую, как уклоняться от него, поскольку параметры требуются, и Builder кажется более подходящим, когда вы выбираете и выбираете.
Примером, на мой взгляд, является объект модели, который не изменяется после создания.
Как вы полагаете, оба варианта имеют свои недостатки. Конструктор с четырьмя аргументами сложно использовать правильно и делает код трудным для чтения. Однако он сообщает, что все параметры являются обязательными.
Конструктор будет проще в использовании и облегчит чтение кода, но сообщит о намерении аргументы необязательно.
Поскольку код чаще читается, чем написан, я рекомендую использовать опцию, которая повышает читаемость в этом случае. Перейдите к строителю и убедитесь, что все параметры проверены, когда метод build()
вызывается как можно быстрее при неправильном использовании построителя. Используйте javadoc, чтобы помочь сообщать, что все параметры являются обязательными.
Если вы хотите создать неизменяемый объект, вам необходимо предоставить конструктор со всеми необходимыми полями.
Вы не можете установить состояние частично, как позже, вам нужно будет добавить понятие "сеттеры", которое по определению добавит изменчивость.
Шаблон Builder действительно касается частичного создания объектов.