Lohnt sich Dependency Injection für jemanden, der normalerweise nur kleine Projekte durchführt (5-20k Zeilen)?

8

Ich mache normalerweise nur Anwendungen für mich als Hobby. Es scheint, dass DI-Frameworks eine große Dynamik in der Community haben, also dachte ich, ich sollte es vielleicht lernen, um meine Programmierkenntnisse zu verbessern. Soweit ich weiß, scheint es mehr auf große Projekte ausgerichtet zu sein. Ist es immer noch eine gute Idee, es zum Beispiel in einem 5k Zeilen Projekt zu verwenden?

    
devoured elysium 16.05.2010, 13:19
quelle

5 Antworten

12

Ich benutze DI für den gesamten Code, den ich schreibe, egal welche Größe.

Sie sollten jedoch beachten, dass DI keinen DI-Container erfordert . Ein DI-Container hilft sicherlich (besonders bei großen Projekten), aber man kann auch container schreiben -agnostischer Code mit DI-Prinzipien.

Die Größe der Codebasis ist nicht wirklich wichtig. Was zählt, ist Wartbarkeit . DI ermöglicht eine lose Kopplung , die wiederum die Wartbarkeit ermöglicht. Für alle außer einmaligen, wegwerfenden Projekten ist das wertvoll.

    
Mark Seemann 16.05.2010, 13:26
quelle
3

Ja - die Abhängigkeitsinjektion fördert die lose Kopplung und Testbarkeit, was für ein Projekt beliebiger Größe nützlich ist, und der Aufwand für die Konfiguration ist relativ gering.

    
Lee 16.05.2010 13:25
quelle
2

Ja, vorausgesetzt, Sie würden sich freuen, wenn Sie Ihre 5k bis 20k Linienprojekte in 3k bis 10k Linienprojekte umwandeln.

Ja, vorausgesetzt, Sie möchten beim Testen eines größeren Teils Ihrer Codebasis weniger Testcode schreiben.

Ja, vorausgesetzt, Sie möchten beurteilen, ob DI Ihnen helfen würde, ein besserer Programmierer zu sein.

    
sal 17.05.2010 02:43
quelle
1

Wenn Sie keine Abhängigkeitsinjektion verwenden, ist es fast sicher, dass Sie kein spöttisches Framework für Ihre Komponententests verwenden oder gar keine Komponententests durchführen. Einer der Vorteile von Komponententests besteht darin, dass Sie letztendlich bessere Entwurfsmuster verwenden, einschließlich der Abhängigkeitsinjektion. Wenn Sie es nicht tun, werden Sie es sehr schwer finden, Ihren Code zu testen.

Ob die Verwendung von DI-Rahmen für Anwendungen Ihrer Größe erforderlich ist oder nicht, ist eine offene Frage. Hinzufügen von externem Code zu Ihrem Projekt wird einige Komplikationen hinzufügen und, ehrlich gesagt, ich habe es noch nicht überzeugend genug für meine Projekte gefunden - noch nicht. Gleichzeitig habe ich an einem Punkt alle meine Mock-Objekte per Hand erstellt und seit ich zu RhinoMocks gewechselt habe, habe ich selten Hand-Mock-Objekte und fühle, dass sich meine Produktivität verbessert hat. DI-Container sind die nächste Technologie auf meiner Liste von Dingen, die es zu erkunden gilt, aber ich habe noch kein Projekt, um es noch einmal auszuprobieren.

Mein Vorschlag, da Sie offen dafür zu sein scheinen, wäre, ein paar DI-Frameworks zu testen und zu sehen, wie gut sie für Sie arbeiten. Wenn Sie nicht genug Wert finden, dann versuchen Sie es mit manueller Injektion - vorausgesetzt, Sie sind nicht an diesem Punkt, wenn Sie sind, dann gehen Sie zurück zu ihm.

    
tvanfosson 16.05.2010 13:38
quelle
1

Effektiv bewirkt die Dependency Injection (DI) einen gewissen "Komplexitätsaufwand" (sowie einen relativ geringen Overhead), der sich bei kleineren Projekten nicht zu lohnen scheint. Es gibt jedoch viele direkte und indirekte Vorteile, wenn Sie mit DI vertraut sind und es gegebenenfalls verwenden. Insbesondere:

Mehr direkt

  • Es ermöglicht eine lose Kopplung der Komponenten / Module innerhalb des Projekts. Daher Förderung der Wiederverwendung von Code und Mustern (aus früheren Projekten)
  • Es hilft beim Testen, indem es die Einführung von Klassen / Modulen erleichtert, die die realen abhängigen Typen ersetzen (vortäuschen).

Indirekt

  • Es fördert die Verwendung von Interfaces: Man definiert die verschiedenen Parameter zu API-Methoden im Hinblick auf Schnittstellen (oder abstrakte Klassen) und nicht auf konkrete Typen.

Als Ergebnis können Sie feststellen, dass die Vertrautheit mit DI und den damit verbundenen Konzepten und Mustern dazu beiträgt, das Projekt mit mehr Abstraktionen, weniger "harten" Abhängigkeitspunkten und generell zu strukturieren, auch wenn DI in einem bestimmten Projekt oder Teilen davon nicht verwendet wird klarere, selbstdokumentierende Objektmodelle.

    
mjv 16.05.2010 13:35
quelle