Одно слово: нет
Больше слов: инъекция зависимостей - это как раз то, что нужно. Это средство, с помощью которого вы вводите ресурсы, от которых зависит другой объект, но не должны знать сложные детали из другого источника. Использование DI не означает, что НИЧТО в вашей программе не должно знать, как создать любой другой объект; на самом деле, я утверждаю, что для нетривиальной программы крайне невозможно полностью избежать «нового» ключевого слова (или альтернатив, основанных на отражении). Однако DI действительно означает, что объекты, которые НЕ ДОЛЖНЫ знать, как создавать сложные объекты, требующие большого количества зависимостей, которые будут тесно связывать этот объект с другим, не должны обладать всеми этими тесно связанными знаниями.
Я хотел бы изучить две основные теории разработки программного обеспечения O / O, GRASP и SOLID. GRASP скажет вам изучить цель объекта и спросить себя: «Должен ли этот объект отвечать за создание новых объектов этого другого типа? Это часть« описания работы »этого объекта?» SOLID идет на один шаг дальше: «S» обозначает «Принцип единой ответственности», который однозначно утверждает, что объект должен иметь одну работу, и это должен быть единственный объект в программе, который выполняет эту конкретную работу.
Таким образом, GRASP, как правило, побуждает вас просматривать существующие классы, для которых создаются эти новые объекты, и находить класс, для которого задача создания этого объекта соответствует тому, что объект уже делает, сохраняя при этом желаемый уровень «сплоченности». SOLID скажет вам, что сплоченность является ключевым фактором; Задача создания этих объектов должна быть передана какой-то фабрике, которая должна быть внедрена в ваш класс. Я думаю, что по мере роста сложности вашей программы вы обнаружите, что соблюдение любой из этих методологий с готовностью к рефакторингу приведет к созданию очень похожих архитектур.