2016-05-31 10 views
2

Ich mag dagger2 eine Menge und möchte es in meinem neuen Projekt verwenden. Der einzige Fehler ist, dass wir mit dagger2 noch einen Boilerplate-Code und die fehlende Unterstützung für CDI schreiben müssen.
Da Google dagger2 entwickelt und wartet und es auch für seine Android-Entwicklung verwendet, frage ich mich, ob sie daran denken, die DI-Implementierung in Guice durch dagger2 zu ersetzen, was meine erste Frage ist.
Wenn sie sind, dann kann ich anfangen, guice zu verwenden, erwartend, dass mit irgendeinem zukünftigen Update ich die Güte des Dolches bekommen werde.
Aber wenn sie nicht sind, gibt es einen Weg, den ich beide im selben Projekt verwenden kann, wo guice auf CDI beschränkt werden kann.Gibt es eine Ebene zu ersetzen DI-Implementierung in Guice mit dagger2

Antwort

2

Ich bin kein Dolch Experte, aber ich werde versuchen, Ihre Frage zu beantworten ... (und ich hoffe, es ist gut zu tun)

Ich frage mich, ob sie die DI ersetzen denken Implementierung in Guice mit dagger2,

Nein. Es gibt keinen guten Grund, es zu tun. Dolch und Guice präsentieren einen völlig anderen Ansatz für das Dependency-Injection-Konzept. Ersteres verwendet eine Code-Generierung, letztere - Laufzeit-Reflektion.

(...) Gibt es einen Weg, den ich beide im selben Projekt verwenden kann, wo GUICE auf CDI beschränkt werden kann?

Ich denke nicht, dass es eine gute Idee ist, CDI, Dolch und Guice im selben Projekt zu mischen. Neben der Tatsache, dass CDI ist nur eine Spezifikation, keine tatsächliche Implementierung wie Weld oder OpenWebBeans - also ich denke, Sie wollten "DI" sagen ?.
Wie dem auch sei: Es gibt dagger-adapter extension, die mit Dagger2 Module mit Guice ermöglicht (mit DaggerAdapter), wenn Sie wirklich 4.


Durch die Art und Weise mit Guice Dagger wollen mischen, würde Ich mag Ihnen eine Vorstellung geben, was Dolch ist und was wird es nie sein. Im Folgenden ist ein Zitat von Christian Gruber zu diesem Thema (die auf Dagger gearbeitet):

Guice immer eine Obermenge von Funktionen im Vergleich zu Dagger haben, obwohl wir mit Dolch auf der Server-Projekte tun und in Stand - Java-Apps. Aber Dolch ist nicht so entwickelt in Bezug auf die umgebenden "Scaffolding" -Code (Servlet-Unterstützung, etc.) wie Guice, und wird es für eine ganze Weile nicht sein. Außerdem werden einige Teams einige fortgeschrittene Guice-Features benötigen oder wollen, die es nie in Dolch schaffen.

Sie können fragen, was sind diese "erweiterten Funktionen"? Es ist z.B. AOP-Unterstützung, wie Abfangmethoden, die für viele Entwickler von entscheidender Bedeutung sein können.

Sie können die gesamte Diskussion lesen (Februar 2014), die here verfügbar ist.

+0

Es gibt keinen guten Grund, es zu tun. --- Bessere Leistung, sauberere Stacktrace sind einige Gründe, die ich mir vorstellen kann. Ich denke, Sie wollten sagen "DI --- Eigentlich meine ich komplette DI-Unterstützung ohne Kesselplatte. Wenn ich CDI erwähne, habe ich mich hauptsächlich auf Container Lifecycle-Unterstützung. – Gomsy

+0

Ich denke, wir sollten immer die Tools-Option anpassen Unsere Anforderungen: Sie sagten "bessere Leistung" - aber braucht Ihre App wirklich diese zusätzlichen wenigen Millisekunden? (Es könnte auf Android, aber auf der Serverseite passieren?). ** Zum Schluss: ** IMHO Ich denke, dass es gut ist Ich habe keinen Grund, die DI-Implementierung in Guice durch dagger2 zu ersetzen. " –

+0

Vielleicht haben Sie mich falsch verstanden. Ich schlage oder erwarte das nicht Dagger2 wird Guice ersetzen, beide sind ausgezeichnete Werkzeuge für verschiedene Anwendungen, was ich meine, ist nur die Unterstrich-DI-Implementierung von Guice zu ersetzen, basierend auf Reflektion, die teuer ist und ersetzt werden muss es mit compile-time-code-erzeugung wie in Dagger2 kann es schneller gemacht werden. – Gomsy

0

Als jemand, der an der Entwicklung von Java-Anwendungsframeworks bei Google arbeitet, kann ich Ihnen versichern, dass Google große wichtige Projekte sowohl mit Guice als auch mit Dagger entwickelt hat und beide DI-Systeme in absehbarer Zukunft weiterhin verwendet und entwickelt werden.

Meine persönliche Idee (die keine offizieller Google-Plan oder Aussage ist) ist, dass im Laufe der Zeit wir beiden mächtigen Abstraktionen auf dem Dagger (wahrscheinlich in Add-on-Frameworks und/oder Bibliotheken) bauen, so dass Dagger weiterhin für eine größere und größere Reihe von Anwendungen, und auch mächtigere Werkzeuge rund um Guice, um die Guice Entwickler Erfahrung mehr und mehr vergleichbar mit der Dagger Entwickler Erfahrung, zumindest für eine Teilmenge von Guice-Anwendungen, die tun machen "normale" Dinge.

Sowohl Dagger als auch Guice sind nützliche Werkzeuge mit jeweils unterschiedlichen Kompromissen und einer anderen Zielgruppe. Beide im selben Projekt zu verwenden, ist etwas, das möglich sein sollte, obwohl das nicht wirklich die ideale Lösung ist, denn dann können Sie die Stärken beider nicht voll ausnutzen. Aber eine bessere Interoperabilität ist ein Ziel, und die Guice and Dagger-Teams kommunizieren regelmäßig darüber, wie man die Bemühungen standardisiert und koordiniert.