Я маю дискусію з колегою про те, скільки роботи може виконати конструктор. У мене є клас B, який внутрішньо вимагає іншого об'єкта A. Об'єкт A - один з небагатьох членів, якому клас B повинен виконувати свою роботу. Всі його публічні методи залежать від внутрішнього об'єкта А. Інформація про об'єкт A зберігається в БД, тому я намагаюся перевірити та отримати його, переглянувши його на БД у конструкторі. Мій колега зазначав, що конструктор не повинен робити більше роботи, крім того, щоб зафіксувати параметри конструктора. Оскільки всі публічні методи в будь-якому разі не зможуть, якщо об’єкт A не буде знайдений за допомогою входів до конструктора, я стверджував, що замість того, щоб дозволити створення екземпляра і пізніше вийти з ладу, насправді краще кинути рано в конструктор.
Що думають інші? Я використовую C #, якщо це має значення.
Читання Чи є коли-небудь причина робити всі роботи об’єкта в конструкторі? мені цікаво, що видобуток об'єкта A, перейшовши до БД, є частиною "будь-якої іншої ініціалізації, необхідної для того, щоб об'єкт був готовий до використання", тому що якби користувач передав конструкторам неправильні значення, я не зміг би використовувати жоден з його публічних методів.
Конструктори повинні інстанціювати поля об’єкта та зробити будь-яку іншу ініціалізацію, необхідну для того, щоб об'єкт був готовий до використання. Це, як правило, означає, що конструкторів мало, але є сценарії, коли це було б значним обсягом роботи.