Есть несколько причин, почему вы должны это сделать. Некоторые хорошие. Некоторые плохие. Начнем с плохой причины:
- Потому что все так говорят. Ваш коллега действительно должен быть в состоянии объяснить, почему, и вы должны спросить его. Тогда суди его причины.
Лучшая причина: это действительно сводится к принципу единой ответственности (S SOLID )
Если у вас есть класс A, который создает экземпляр класса B и вызывает этот экземпляр, то это действительно сильный намек на то, что вы объединили две обязанности. (создать и позвонить или сформулировать это по-другому: решить, кто должен что-то делать, и позволить этому сделать).
Средство защиты от этого - создать экземпляр B вне A и поместить его в A. В зависимости от варианта использования у вас есть разные варианты
создайте B вне A и вставьте его в A через конструктор. Это правильный путь, если A нужен B в нескольких местах, и ему нужен ровно один.
создайте B вне A и вставьте его в A с помощью вызова некоторого метода. Это правильный путь, если A нуждается в B (s) для одного взаимодействия и нуждается / принимает другой в следующем взаимодействии.
передать фабрику в A, которую A может использовать для создания B по желанию. Это уместно, когда A требуется несколько Bs.
Таким образом, остается вопрос: почему так плохо использовать конструктор напрямую, а не фабрику, кроме нарушения какого-то утомительного правила, выдуманного действительно умным человеком? Если A создает Bs, вызывая конструктор для B, ему нужно знать все, что нужно B для выполнения своей работы, что может быть связано с большим количеством вещей и связано с необходимостью создания C, D и Es, которые сами имеют зависимости, которые необходимо создать. .. Я думаю, вы видите смысл.