Я сомневаюсь, что у вас будут какие-то точные данные, поэтому я добавлю некоторые мысли по этому поводу.
Во-первых, вы не используете DI (или другие принципы SOLID), потому что это помогает вам использовать TDD. И наоборот, вы делаете TDD, потому что это помогает вам в разработке - что обычно означает, что вы получаете код, который следует этим принципам.
Обсуждение причин использования интерфейсов - это другое дело, см .: https://stackoverflow.com/questions/667139/what-is-the-purpose-of-interfaces.
Я предполагаю, что вы согласны с тем, что ваши занятия делают много разных вещей, что приводит к грязному коду. Таким образом, я предполагаю, что вы уже идете на SRP.
Поскольку у вас есть разные классы, которые делают определенные вещи, вам нужен способ связать их. Если вы связываете их внутри классов (то есть конструкторов), вы получаете много кода, который использует конкретные версии классов. Это означает, что вносить изменения в систему будет сложно.
Вам необходимо изменить систему, это факт разработки программного обеспечения. Вы можете позвонить в YAGNI, чтобы не добавлять конкретные дополнительные функции, но не о том, что вам не нужно будет менять систему. В моем случае это очень важно, так как я делаю еженедельные спринты.
Я использую DI-фреймворк, где настройка выполняется с помощью кода. С очень маленькой конфигурацией кода вы связываете множество различных отношений. Итак, когда вы убираете обсуждение интерфейса против конкретных классов, вы на самом деле экономите печатать, а не наоборот. Также для случаев, когда конкретный класс находится в конструкторе, он подключает его автоматически (мне не нужно настраивать), создавая остальные отношения. Это также позволяет мне контролировать время жизни некоторых объектов, в частности, я могу настроить объект как Singleton, и он постоянно обрабатывает один экземпляр.
Также обратите внимание, что использование этих методов не требует больших затрат. Использование их в первый раз - вот что приводит к накладным расходам (из-за процесса обучения +, в некоторых случаях изменение мышления).
Итог: вам не нужно помещать все эти вызовы конструктора повсеместно, чтобы идти быстрее.