Подводя итог, можно сказать, что конструкторы - это простейший способ гарантировать, что создаются только действительные объекты.
Однако, используя конструктор, мне любопытно узнать, как поддерживать код в том виде, в каком он был изменен, чтобы поддерживать это требование, не нарушая существующий код по всей базе кода.
Я не совсем уверен, что вы имеете в виду: риск того, что позже вы поймете, что вам нужны дополнительные (или меньшие) параметры для создания действительных объектов? ИМХО , что должно быть смягчено тщательным проектированием, прототипированием и тестированием до публикации вашей библиотеки . Публичные API очень трудно изменить. В случае широко используемого, даже сломанные и устаревшие функции должны поддерживаться бесконечно (свидетель Object.clone()
на Java). Что бы вы (или клиенты) ни делали для создания объекта, если требуемый параметр оказывается отсутствующим, это ошибка. ИМО, лучше определять такие случаи во время компиляции, чем во время выполнения, и конструкторы предоставляют самый простой и легкий способ добиться этого.
Другие варианты, которые вы можете рассмотреть:
- с использованием фабричного метода (вам все еще нужно иметь все обязательные параметры внутри метода создания, но вы можете использовать некоторые значения по умолчанию для пропущенных параметров, что позволит избежать взлома клиентского кода),
- с использованием Builder (аналогично вышеописанному, но это дает вам гораздо большую гибкость в настройке параметров конструкции или предоставлении значений по умолчанию).