Ich bezweifle, dass Sie irgendwelche harten Daten darüber haben, also werde ich einige Gedanken dazu hinzufügen.
Zuerst verwenden Sie nicht DI (oder andere SOLID-Prinzipien), weil es Ihnen hilft, TDD zu tun. Andersherum macht man TDD, weil es dir beim Design hilft - was normalerweise bedeutet, dass du Code bekommst, der diesen Prinzipien folgt.
Diskutieren, warum die Verwendung von Schnittstellen ist eine andere Sache, siehe: https://stackoverflow.com/questions/667139/what-is-the-purpose-of-interfaces.
Ich gehe davon aus, dass Sie zustimmen, dass Ihre Klassen viele verschiedene Dinge haben, was zu unordentlichem Code führt.Daher gehe ich davon aus, dass Sie sich bereits für SRP entscheiden.
Da Sie verschiedene Klassen haben, die bestimmte Dinge tun, benötigen Sie eine Möglichkeit, sie in Beziehung zu setzen. Wenn Sie sie innerhalb der Klassen (d. H. Den Konstruktoren) beziehen, erhalten Sie viel Code, der bestimmte Versionen der Klassen verwendet. Dies bedeutet, dass Änderungen am System schwierig sein werden.
Sie müssen das System ändern, das ist eine Tatsache der Softwareentwicklung. Sie können YAGNI anrufen, um bestimmte zusätzliche Funktionen nicht hinzuzufügen, aber Sie müssen das System nicht ändern. In meinem Fall ist das etwas sehr Wichtiges, da ich wöchentliche Sprints mache.
Ich verwende ein DI-Framework, wo die Konfiguration über Code erfolgt. Mit einer wirklich kleinen Code-Konfiguration verbinden Sie viele verschiedene Beziehungen. Also, wenn Sie die Diskussion über Schnittstellen vs. konkrete Klassen wegnehmen, sparen Sie tatsächlich das Tippen nicht umgekehrt. Auch für die Fälle befindet sich eine konkrete Klasse im Konstruktor, sie hängt sich automatisch an (ich muss das nicht konfigurieren) und baut die restlichen Beziehungen auf. Es erlaubt mir auch, die Lebensdauer einiger Objekte zu steuern, insbesondere kann ich ein Objekt als Singleton konfigurieren und es gibt immer eine einzige Instanz.
Beachten Sie auch, dass die Verwendung dieser Verfahren nicht mehr Aufwand verursacht. Wenn man sie zum ersten Mal benutzt, verursacht dies den Overhead (wegen des Lernprozesses + in einigen Fällen ist die Änderung der Denkweise nötig).
Fazit: Sie müssen nicht alle diese Konstruktor Anrufe überall platzieren, um schneller zu gehen.