Я веду дискуссию с моим коллегой о том, сколько работы может сделать конструктор. У меня есть класс B, который внутренне требует другого объекта A. Объект A - один из немногих членов, которым класс B должен выполнять свою работу. Все его открытые методы зависят от внутреннего объекта A. Информация об объекте A хранится в БД, поэтому я пытаюсь проверить и получить ее, просмотрев ее в БД в конструкторе. Мой коллега отметил, что конструктор не должен выполнять большую работу, кроме как записывать параметры конструктора. Так как все публичные методы в любом случае потерпят неудачу, если объект A не будет найден с использованием входных данных для конструктора, я утверждал, что вместо того, чтобы разрешить создание экземпляра и последующий сбой, на самом деле лучше бросить конструктор раньше.
Что думают другие? Я использую C #, если это имеет какое-либо значение.
Чтение Есть ли когда-нибудь причина выполнять всю работу с объектом в конструкторе? мне интересно, что выбор объекта A путем перехода в DB является частью «любой другой инициализации, необходимой для того, чтобы сделать объект готовым к использованию», потому что, если пользователь передал неверные значения конструктору, я не смог бы использовать ни один из его открытых методов.
Конструкторы должны создавать экземпляры полей объекта и выполнять любую другую инициализацию, необходимую для готовности объекта к использованию. Обычно это означает, что конструкторы небольшие, но есть сценарии, в которых это будет значительный объем работы.