Sollten Sie in einem Projekt, das ein DI-Framework verwendet, den neuen Operator NIE verwenden?

7

Ich versuche, mich mit Dependency Injection zu beschäftigen.

Eines der Dinge, über die ich verwirrt bin, ist, ob all Ihrer Objekt-Instanziierung vom DI-Framework (Spring, Guice usw.) gesteuert werden muss.

Oder, wenn nicht, wie bestimmen Sie, welche Objekte vom Framework instanziiert werden und welche Objekte mit dem Operator new instanziiert werden?

    
Chuck 28.03.2010, 16:31
quelle

5 Antworten

11

Nein, es gibt immer noch einen Platz für Neues. Nicht alle Objekte müssen unter der Kontrolle der DI-Fabrik stehen.

Sie können leicht die Klassen erkennen, die unter der Kontrolle der DI-Fabrik stehen müssen, da sie normalerweise Schnittstellen und Implementierungen umfassen.

Jedes lokale Objekt in einer Implementierung ist berechtigt, einen neuen Aufruf auszuführen. Modellobjekte, die instanziiert werden, um einen bestimmten Anwendungsfall zu erfüllen, sollten instanziiert werden, indem new aufgerufen und die Parameterwerte für diese bestimmte Instanz übergeben werden.

    
duffymo 28.03.2010, 16:33
quelle
10

Ich habe diesen Beitrag von Miško gefunden Es ist sehr hilfreich, um zu unterscheiden, welche Objekte als Abhängigkeiten injiziert werden sollten und welche erstellt werden können. Er unterscheidet zwischen "newable" und "injizierbaren" Klassen.

    
Ben Lings 28.03.2010 16:51
quelle
2

Ich würde sagen, einfacher Objekte ohne "echte" Abhängigkeiten sollten nicht injiziert werden. Dies können Datenobjekte oder natürlich Ausnahmen und dergleichen sein.

Die Sache "Eliminate the new operator" gibt im Grunde nur eine gute Richtlinie, wo man nach DI-fähigen Sachen suchen kann.

    
Hans Wagner 10.04.2010 23:16
quelle
1

Solange Newizing-up Sie nicht davon abhält, Verhaltensweisen für Tests zu isolieren, ist alles in Ordnung. Beispiele könnten das Erstellen von Sammlungen oder Werttypen sein, die innerhalb einer Implementierung verwendet werden, aber nicht "object work", per se.

Konzentriere dich auf das Wort "Abhängigkeit" - ist das Objekt in Frage, auf das man sich in irgendeiner Weise stützt, damit das umhüllende Objekt seinen einen wahren Zweck für das Existieren erfüllt? Wenn ja, sollte es von außen injiziert werden.

    
Jay 28.03.2010 16:41
quelle
1

new schließt DI-Frameworks nicht unbedingt aus. Im Frühjahr können Sie z. B. die Funktion zum Laden von Klassen verwenden, um Abhängigkeiten auszuführen Injection für jedes Objekt, das von new erstellt wurde.

Wenn also new und containergesteuerte DI in Java normalerweise sich gegenseitig ausschließen, ist dies keine feste Regel.

    
skaffman 28.03.2010 21:24
quelle