Как и RAY, я бы посоветовал держать компоненты маленькими и сфокусированными.Чтобы сделать утверждения Нишанта и Маркуса более точными, конструктор должен оставить объект инициализированным, но у вас действительно есть выбор, как это сделать.
Я обычно против создания взаимодействующих объектов из конструктора напрямую (через нового оператора) или косвенно (через закрытый вызов метода), потому что это усложняет тестирование.Иногда вы хотите заменить соавтора на фальшивого, чтобы найти источник ошибки.Если вы используете новый оператор или закрытый метод, вам будет нелегко это сделать.
Поэтому я склоняюсь к передаче зависимостей моему конструктору через его параметры из какого-то внешнего места (фабрикаили строитель, упомянутый Bringer128).Ваш конструктор ожидает, что параметры уже были инициализированы, поэтому после назначения их полям объекта объект готов к использованию.
Конечно, в случае зависимостей вам никогда не придется подставлять его, это проще ивсе еще безопасно создавать их экземпляры непосредственно внутри конструктора.Особенно в графических интерфейсах будет много таких случаев (ярлыки и тому подобное).Однако, если у вас есть зависимость извне уровня GUI (например, бизнес-объекта), я бы определенно не создавал ее в конструкторе.