Вы должны спросить себя, нужно ли вашему классу создавать столько вещей, возможно, он делает слишком много. Это признак того, что вам следует пересмотреть свой дизайн или просто определить, какую «работу» выполняет конструктор.
Это правда, что вы не сможете создать экземпляр с недопустимым состоянием; таким образом, конструктор должен принять все свойства, которые вам необходимы, чтобы быть в допустимым состоянием.
В определенной степени это зависит от вашей модели. Например, в ORM, который я использую, конструктор принимает один параметр; идентификатор, по которому он может загружать все остальные свойства. Было бы неприятно, если бы мне пришлось передать их все (это действительно задача ORM; настроить этот объект). Таким образом, в этом смысле вы можете утверждать, что у вас есть «недействительный» объект (свойства не установлены). Но ты ошибаешься; то, что у вас есть, это «пустой» или «пустой» объект. Это не то же самое, что недействительный.
Так что подумайте о том, что означает, что ваш объект является "недействительным". Я бы посчитал его недействительным, если бы другие методы взяли этот объект и выдавали исключение, потому что что-то не было установлено. Используйте эту логику, чтобы определить, что должно быть в конструкторе, а что может быть установлено позже (каким-либо другим процессом).