Общее правило: есть методы, которые очень тривиальны и вряд ли выдают исключения в конструкторе.Если методы могут потерпеть неудачу по какой-либо причине (доступ к файлу или отсутствие, проблема с базой данных, нулевая ссылка ...), тогда он не должен быть в конструкторе, поскольку люди должны ожидать, что конструкторы не потерпят неудачу (особенно конструкторы без параметров, хотя общее руководствоне указывает)Люди не должны ожидать, что var seating = new Seating();
будет источником ошибок.
Вы можете добавить Start()
/ Initialize()
методы в качестве методов экземпляра, как вы упомянули.Вы также можете добавить новый статический метод, который возвращает новый экземпляр класса после вызова двух необходимых вам методов, и сделать конструктор закрытым.Вы можете пойти дальше и использовать этот метод в новом классе Factory (делая конструктор внутренним).Вы можете подумать и о других способах сделать это.
Одна вещь: вы можете увидеть любое значение, вычисленное или полученное в этих методах, параметром конструктора (и не имеющим конструктора без параметров), тогда конструктор будет назначать только эти параметры.в соответствующие поля / свойства.Заводской метод или метод службы в той же сборке или другой выделенной сборке «Службы» могут отвечать за вызов методов, получение параметров, передачу их конструктору и возврат нового экземпляра класса.Это мой личный фаворит.
Вообще говоря, такого рода проблемы являются признаком того, что класс делает слишком много, и вы можете разделить функциональность на другие классы (существующие или новые).Вот почему предлагается последнее решение, чтобы оба метода могли быть в другой сборке «Службы», но, как уже упоминалось выше, есть много других способов сделать это, если хотите.
Обновление:
Вот рекомендации Microsoft для конструкторов:
Рекомендации по использованию конструкторов
Цитирование со страницы:
Минимизируйте объем выполненной работыв конструкторе.Конструкторы не должны делать больше, чем захватить параметр или параметры конструктора.Это задерживает затраты на выполнение дальнейших операций, пока пользователь не использует определенную функцию экземпляра.
Обновление 2
Приведенная выше страница перемещена в живой документ (что означает, что он может обновляться)под названием Конструктор Дизайн .