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