Kapselung Statische Helper Klassen

Sanix

Top Contributor
Ich bin in letzter Zeit häufiger auf riese Helperklassen gestossen, die 1000 Zeilen gross sind und andere Helperklassen callen. Sämtliche Methoden sind statisch, was nicht so verkehrt ist, da sie keinen State brauchen.
Jetzt ist das Problem, dass wenn man testen will, auf die Schnauze fliegt. Es ist schwer mockbar und man kriegt es auch nicht wirklich getrennt. Macht man das Ganze nicht statisch führt das zu solchem Code:

Java:
new UserCreationHelper().createUser(....)

Wie handhabt ihr das in der Regel? Ich habe bisschen gegoogled und es gibt solche, die aus Prinzip keine statischen Methoden mehr schreiben.
 
Ich mach das immer so, dass ich die Methoden der Helper-Klasse importiere:
Java:
...
import static Helper.*;
...
dann braucht man die Klasse nicht dazu schreiben oder neu erstellen.
 
S

SlaterB

Gast
die ersten beiden Antworten sind wohl nicht ganz beim Thema, static fällt weg,
für das normale Objekt ist 'new UserCreationHelper().createUser(....)' als zu lange Schreibweise in Frage gestellt

grundsätzlich kann so ein Code da gar nicht stehen, der wäre ja genausowenig variabel/ testbar wie ein statischer Aufruf,
jedenfalls nicht wenn an zig Codestellen auf diese Weise und wenn nicht in UserCreationHelper noch eine Indirektion/ eine Unterscheidung stattfindet

besser für Austauschbarkeit und auch etwas schreibärmer ist eine interne Konfiguration, der Helper ist im Objekt bereits gesetzt,
dann getUserHelper().createUser(..);
für besonders häufige Fälle auch direkt eine Methode createUser(..), die intern an getUserHelper() weiterleitet

hat man nur wenige Helper, dann kürzer zu benennen denkbar, bis hin zu getHelper(),
gibt es mehrere Helper, könnten die ineinander konfiguriert sein:
getHelper().getUserHelper().createUser(..);
wiederum bei häufigen Gebrauch eines Unter-Helpers eine eigene Methode dafür, zurück zu
getUserHelper().createUser(..);
wobei getUserHelper() den UserHelper aus getHelper() holt

heute schon das Wort Helper erwähnt? ;) sicherlich allgemein auch verpöhnt, ich persönlich nutze auch 'Context'

worauf ich jedenfalls in den letzten Zeilen hinauswollte ist, dass jene normale Klasse genau ein Attribut mit Link auf zentralen Helper/ Context benötigt, besser als viele Einzelattribute,
der Helper kann ziemlich am Anfang einmal erstellt und initial verteilt werden,
danach im Hintergrund oder offensichtlicher im Konstruktor an weitere Programmklassen, überall verfügbar

das wäre dann natürlich ein ziemlich zentrales Programmelement, nix für jede neue kleine Einführung,
die Zentralität ermöglicht aber gerade erst die gute Austauschbarkeit

Dependency Injection ? Wikipedia
ist dazu sicher auch ein Thema
 
N

nillehammer

Gast
Wie handhabt ihr das in der Regel? Ich habe bisschen gegoogled und es gibt solche, die aus Prinzip keine statischen Methoden mehr schreiben.
Java:
// Zunächst public Interface definieren
public interface Helper {
  // die ganzen Methoden definieren
}

// Dann package-visible enum mit genau einem Element
enum HelperImpl implements Helper{
  INSTANCE;
  // die ganzen Methoden aus dem Interface implementieren
}

// Dann Facade für Zugriff auf Implementierung
public class HelperFacade {

  public static Helper getHelper() {
   return HelperImpl.INSTANCE;
  }
}
So mach ich es. Man könnte auch die Facade als Interface mit Implementierung gestalten, um ganz ohne public static Methoden auszukommen, aber das finde ich dann doch etwas überkandidelt.
 

Sanix

Top Contributor
Vielen Dank für die letzten 2 Antworten. Die ersten 2 gingen wohl wirklich am Thema vorbei.

So werden wir das wohl auch lösen müssen. Irgendwie habe ich das Gefühl, das mit J2EE wieder viel prozedural programmiert wird, was eigentlich Helperklassen genau sind.

Das ganze über Dependency Injection ist ja eigentlich nichts anderes als der oben beschriebene Ansatz, einfach das die Factory vom Container übernommen wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
temi Private statische Hilfsmethoden Allgemeine Java-Themen 33
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
M Zeiger auf statische Variable Allgemeine Java-Themen 1
C Classloading und statische Variablen Allgemeine Java-Themen 2
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
R Statische Klasse: Best practice mit flags (2) Allgemeine Java-Themen 3
N Klasse rausfinden, an der eine statische Methode aufgerufen wurde ? Allgemeine Java-Themen 10
R statische initialisierer Allgemeine Java-Themen 7
S statische Methoden und Vererbung Allgemeine Java-Themen 6
M Zwingen eine statische Methode zu importieren Allgemeine Java-Themen 5
heart_disease Designfrage: Statische Konfigurationsklasse Allgemeine Java-Themen 10
S statische Interfaces..? Allgemeine Java-Themen 6
M Wann Membermethoden, wann statische Utility-Methoden? Allgemeine Java-Themen 24
S Innere Klassen und die statische Methode access$x Allgemeine Java-Themen 5
S Statische Methoden in abstrakte Klassen deklarieren? Allgemeine Java-Themen 17
M Paralleler Zugriff auf statische Methode Allgemeine Java-Themen 5
J Statische Methoden in Interfaces? Allgemeine Java-Themen 10
F Statische Methode in abstrakter Superklasse definieren Allgemeine Java-Themen 4
B Statische Methode? Komisch. Allgemeine Java-Themen 5
G Wann statische Methoden, statische Attributen? Allgemeine Java-Themen 7
G Statische Methoden erzwingen Allgemeine Java-Themen 2
H Zugriff auf statische Variable synchronisieren Allgemeine Java-Themen 4
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
S Tiefe Kopie einer Baumstruktur als statische Methode Allgemeine Java-Themen 8
M statische Methode per reflection aufrufen Allgemeine Java-Themen 2
M statische regex und vergleiche oder immer wieder compilen Allgemeine Java-Themen 2
S Statische Methode oder nicht? Allgemeine Java-Themen 5
T in einer statischen Methode ein nicht statische Aufrufen Allgemeine Java-Themen 5
D Statische, generische Methode will nicht. Allgemeine Java-Themen 2
H Zugriff auf statische Methode durch mehrere User Allgemeine Java-Themen 19
S Auf statische Funktionen mit Java Reflections zugreifen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
D java(tm) plug-in ssv helper Allgemeine Java-Themen 0
A Sowas wie ein Delphi Helper Allgemeine Java-Themen 3
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
8u3631984 Jacoco Testcoverage bei Abstracten Klassen in verschachtelten Modulen Allgemeine Java-Themen 6
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Wie kann ich mein 8 Klassen Gebilde objektorientierter schreiben? Allgemeine Java-Themen 114
N abstracte klassen methoden Allgemeine Java-Themen 32
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
L Classpath Zur Laufzeit bestimmte Klassen in Classloader hinzufügen? Allgemeine Java-Themen 4
P Abstrakte Klassen vs. Interface Allgemeine Java-Themen 4
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
B Problem mit meinen Klassen Allgemeine Java-Themen 6
I Array Parameter mit 2 Klassen - NullPointerException Allgemeine Java-Themen 3
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
F Code in Klassen bringen Allgemeine Java-Themen 4
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B Vererbung Interface und implementierende Klassen Allgemeine Java-Themen 8
D Klassen JLabels in anderen Klassen verwenden. Allgemeine Java-Themen 7
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
A Anonyme Klassen - Interface Allgemeine Java-Themen 5
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
S Klassen Abstrakte Klassen Allgemeine Java-Themen 5
T Log4J - Deaktivierung für einzelne Klassen Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
X Klassen aus jar in jar Laden Allgemeine Java-Themen 1
S Klassen Klassen "virtuell" erstellen Allgemeine Java-Themen 5
J Aus mehreren Klassen ein Datei ausführbare machen Allgemeine Java-Themen 6
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
Sin137 Struktur der Klassen & Package Allgemeine Java-Themen 2
G Klassen und interne Klassen Allgemeine Java-Themen 1
S Klassen übergeben Allgemeine Java-Themen 13
C Klassen und Konstruktor Allgemeine Java-Themen 2
S Classpath Wie kann ich Java-Library Klassen "verstecken"..? Allgemeine Java-Themen 4
A Java speech - 2 Klassen Allgemeine Java-Themen 1
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
V Klassenname von allen Klassen mit einer bestimmten Eigenschaft bekommen Allgemeine Java-Themen 2
B Classpath Eclipse findet importierte Klassen nicht Allgemeine Java-Themen 1
C DBConnection als Methode in mehreren Klassen Allgemeine Java-Themen 4
C Arten von Klassen Allgemeine Java-Themen 3
7 Verbinden von Mehreren Klassen Allgemeine Java-Themen 29
A Klassen ein Interface aufzwingen Allgemeine Java-Themen 4
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben