Inject Util Klasse mit Google Guice vs statische Methoden?

8

Ich frage mich, ob es ein guter Stil ist, Hilfsmethoden mit Google Guice einzuspritzen.

Nehmen wir an, wir haben eine Converter-Utility-Klasse:

%Vor%

Meine Idee ist, guice zu verwenden, um dieses Dienstprogramm wie Singleton wie folgt zu injizieren

%Vor%

Welcher Weg wird für eine mit guice erstellte Anwendung empfohlen?

    
Dominik Obermaier 06.12.2010, 20:33
quelle

3 Antworten

11

Dies hängt von der Art Ihrer convert() -Methode ab.

Wenn es etwas ist

  • einfach
  • deterministisch (d. h. hängt nicht von zusätzlichen Parametern ab)
  • haben keine Nebenwirkungen
  • wird sich wahrscheinlich nicht ändern
  • usw.

Sie können es als statische Hilfsmethode beibehalten.

Ansonsten ist es ein guter Kandidat für die Abhängigkeitsinjektion (Sie können es in ConversionService umbenennen, um es klarer zu machen).

    
axtavt 06.12.2010, 20:53
quelle
4

Zunächst ist es Ihr Ziel, eine Instanz dieser Utility-Klasse zu injizieren, anstatt weiterhin die statische Methode zu verwenden, die Sie haben. Funktionen mit Eingabe und Ausgabe und ohne Nebenwirkungen sind oft die besten statischen Methoden. Das heißt, vielleicht möchten Sie in der Lage sein zu ändern, was diese Methode zum Testen oder ähnliches tut. In diesem Fall möchten Sie, dass die Klasse eine Schnittstelle implementiert, die Sie in Clientklassen verwenden.

Wenn UtilClass stateless ist, würde ich es auf jeden Fall als nicht als Singleton einfügen. Das Injizieren eines Nicht-Singleton ist schneller als das Injizieren eines Singletons. Wenn Sie die injizierte Instanz in vielen anderen Klassen speichern möchten, ist ein Singleton möglicherweise sinnvoll, um Speicherplatz zu sparen.

    
ColinD 06.12.2010 21:02
quelle
3
___ qstntxt ___

Ich frage mich, ob es ein guter Stil ist, Hilfsmethoden mit Google Guice einzuspritzen.

Nehmen wir an, wir haben eine Converter-Utility-Klasse:

%Vor%

Meine Idee ist, guice zu verwenden, um dieses Dienstprogramm wie Singleton wie folgt zu injizieren

%Vor%

Welcher Weg wird für eine mit guice erstellte Anwendung empfohlen?

    
___ answer4370844 ___

Dies hängt von der Art Ihrer %code% -Methode ab.

Wenn es etwas ist

  • einfach
  • deterministisch (d. h. hängt nicht von zusätzlichen Parametern ab)
  • haben keine Nebenwirkungen
  • wird sich wahrscheinlich nicht ändern
  • usw.

Sie können es als statische Hilfsmethode beibehalten.

Ansonsten ist es ein guter Kandidat für die Abhängigkeitsinjektion (Sie können es in %code% umbenennen, um es klarer zu machen).

    
___ qstnhdr ___ Inject Util Klasse mit Google Guice vs statische Methoden? ___ answer4370934 ___

Zunächst ist es Ihr Ziel, eine Instanz dieser Utility-Klasse zu injizieren, anstatt weiterhin die statische Methode zu verwenden, die Sie haben. Funktionen mit Eingabe und Ausgabe und ohne Nebenwirkungen sind oft die besten statischen Methoden. Das heißt, vielleicht möchten Sie in der Lage sein zu ändern, was diese Methode zum Testen oder ähnliches tut. In diesem Fall möchten Sie, dass die Klasse eine Schnittstelle implementiert, die Sie in Clientklassen verwenden.

Wenn %code% stateless ist, würde ich es auf jeden Fall als nicht als Singleton einfügen. Das Injizieren eines Nicht-Singleton ist schneller als das Injizieren eines Singletons. Wenn Sie die injizierte Instanz in vielen anderen Klassen speichern möchten, ist ein Singleton möglicherweise sinnvoll, um Speicherplatz zu sparen.

    
___ tag123guice ___ Guice ist ein einfaches Framework zur Abhängigkeitsinjektion für Java. ___ antwort4371046 ___

Persönlich versuche ich normalerweise nicht, dass die Tatsache, dass meine Anwendung verdrahtet ist, mithilfe eines Dependency-Injection-Frameworks Einfluss auf die Design-Entscheidungen hat, die ich für meine Kurse etc. treffe. Gute Design-Praktiken sollten dies diktieren. In Ihrem Fall scheint es, dass Ihre Utility-Klasse keine Abhängigkeit vom Status hat, daher scheint es ein vernünftiger Kandidat zu sein, als statisch zu bleiben.

Unabhängig davon ist Ihre Dienstprogrammklasse keine Implementierung einer Schnittstelle, daher hat der Clientcode, der sie verwendet, immer noch eine eng gekoppelte Abhängigkeit. Damit ist es schwierig zu sehen, welchen Nutzen DI hat, um die Utility-Klasse überhaupt zu injizieren, anstatt die statische Klasse direkt in Ihrem Client-Code zu referenzieren.

    
___ tag123dependencyinjection ___ Ein Entwurfsmuster, um die Kopplung zwischen Komponenten zu reduzieren, indem dynamisch in Abhängigkeiten einer Softwarekomponente injiziert wird, die es benötigt, um zu funktionieren. ___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123static ___ Statisch ist ein in einigen Programmiersprachen verwendeter Begriff, um eine Funktion oder einen Datenspeicherbereich (Feld) zu definieren, der nicht an eine bestimmte Objektinstanz gebunden ist. In den meisten Fällen sollte dieses Tag, falls verwendet, in Verbindung mit einem spezifischen Programmiersprachen-Tag verwendet werden. ___
Pero P. 06.12.2010 21:17
quelle