OOP Sind Helferklassen böse?

Sogomn

Bekanntes Mitglied
Man liest ja häufig, dass Helferklassen (sowohl statische als auch instanziierte) schlechter Stil sind. Andere sagen, dass sie, wenn als solche gekennzeichnet, vollkommen in Ordnung sind. Ich finde es in einigen Fällen unvermeidbar (Bilder/andere Dateien laden).
Ich habe hier einen komplett unübersichtlichen Code (unten), bei dem alles in eine Methode gestopft ist. Ich würde jetzt eine Helferklasse machen, welche einfach nur ein Container für eine Methodensammlung ist, um auf die einzelnen Events zu reagieren. Wie würdet ihr das lösen?

Code:
  private boolean handleEvent(final AbstractGameEvent event, final AbstractObservable source) {
     final GameEventType type = event.getEventType();
    
     if (type == GameEventType.CLIENT_CONNECTED) {
       final EventClientConnected connected = (EventClientConnected)event;
       final ActiveConnection connection = connected.getClient();
      
       connect(connection);
      
       return true;
     } else if (type == GameEventType.CLIENT_DISCONNECTED) {
       final EventClientDisconnected disconnected = (EventClientDisconnected)event;
       final ActiveConnection connection = disconnected.getClient();
       final Player player = users.get(connection);
       final EventRemoveElement remove = new EventRemoveElement(player.uniqueId);
      
       disconnect(connection);
       users.remove(connection);
       sendBroadcast(remove);
      
       return true;
     } else if (type == GameEventType.LOGIN && source instanceof ActiveConnection) {
       final EventLogin login = (EventLogin)event;
       final ActiveConnection connection = (ActiveConnection)source;
      
       handleLogin(connection, login);
      
       return true;
     } else if (type == GameEventType.MOVE_ELEMENT) {
       final EventMoveElement move = (EventMoveElement)event;
      
       if (source instanceof ActiveConnection) {
         final ActiveConnection connection = (ActiveConnection)source;
         final Player player = users.get(connection);
        
         player.applyMovementLocally(move);
         player.createMovementBy(move);
       } else if (source instanceof AbstractLiving) {
         sendBroadcast(event);
       }
      
       return true;
     }
    
     return false;
   }
 

lam_tr

Top Contributor
Oder Design Patterns benutzen. Ich hatte vor kurzem ein ähnliches Problem gehabt, da wurde mir das Strategy Pattern beigebracht. Fand ich gar nicht mal so schlecht.

Gruß lam
 

Sogomn

Bekanntes Mitglied
Vielen Dank für die Antwort!
Ich hab' mir das Pattern mal angesehen. Da müsste ich dann aber eine ganze Menge Methoden definieren und das Interface wäre so auch nicht wirklich wiederverwendbar.
Es ist aber - glaube ich - trotzdem die beste Lösung.
 

lam_tr

Top Contributor
Ja ich finde es sind schon recht viele Schritte zu tun, aber falls du deinen "else if" Zweig noch um ein paar weitere erweitern solltest, ist die Variante auf jeden Fall viel schöner UND du muss es nur an einer zentralen Stelle es einstellen und kannst überall wiederverwenden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
W Wieviele Threads sind sinnvoll? Allgemeine Java-Themen 8
L Bewerberaufgaben sind nur Zeitverschwendung... Allgemeine Java-Themen 10
W Was genau sind IOTools? Kann ich stattdessen nicht die Scanner Klasse verwenden? Allgemeine Java-Themen 3
D Was sind Bibliotheken in Java/Pyhton? Allgemeine Java-Themen 1
F Java Installationen sind unterschiedlich Allgemeine Java-Themen 11
N Was sind Logger in Java? (bzgl. SonarLint) Allgemeine Java-Themen 3
Kaffeevertilger Warum nullable Booleans doof sind ... Allgemeine Java-Themen 22
A Datentypen Gregorian Calendar - 2 Daten sind gleich?? Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
U Set erklären dass objekte gleich sind Allgemeine Java-Themen 12
G Generics sind zu streng - oder ich zu naiv? Allgemeine Java-Themen 3
G Wie groß sind die Adressen in Java? Allgemeine Java-Themen 4
E Funktion sperren bis Unterfunktionen ferig sind Allgemeine Java-Themen 3
S Hash-Bereiche erstellen die gleichverteilt sind..? Allgemeine Java-Themen 8
L Sicherstellen das 2x die gleichen Daten unter bestimmten Keys enthalten sind. Allgemeine Java-Themen 6
S ThreadPoolExecutor: wie stelle ich fest dass meine Threads im Pool mit ihrer Arbeit fertig sind? Allgemeine Java-Themen 3
H Prüfen, ob doppete Werte in int-Array vorhanden sind Allgemeine Java-Themen 16
N URL einlesen -> Daten sind nicht vollständig bzw. korrekt Allgemeine Java-Themen 9
G Datei einlesen: Umlaute sind Fragezeichen Allgemeine Java-Themen 23
aokai Testen von Klassen die abhängig von Stdlibs URL sind Allgemeine Java-Themen 3
M Methodenaufrufe sind über Interfaces langsamer. Allgemeine Java-Themen 43
G Sind Applets noch uptodate Allgemeine Java-Themen 24
D Problem mit Tooltips und JFrame (Tooltips sind zu kurz!) Allgemeine Java-Themen 4
T Überprüfen ob zwei Farben ähnlich sind Allgemeine Java-Themen 14
M Sind Streams asynchron? Allgemeine Java-Themen 2
G Prüfen ob Ziffern einer Zahl pandigital sind? Allgemeine Java-Themen 15
O Warten bis alle gestarteten Threads beendet sind? Allgemeine Java-Themen 6
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
M wie dateien speichern damit sie platform unabhängig sind? Allgemeine Java-Themen 2
D gewisse Zeichen sind nach dem entschlüsseln anders Allgemeine Java-Themen 2
K Wie gut sind java.util - ADTs ? Allgemeine Java-Themen 2
Bleiglanz Benchmarks sind sehr schwierig Allgemeine Java-Themen 2
P Woher weiß ein Programm wo seine Ressourcen sind? Allgemeine Java-Themen 4
U wie groß sind Verzeichnisse Allgemeine Java-Themen 11
N String überprüfen ob nur Ziffern enthalten sind!! Allgemeine Java-Themen 8
S Was sind eigentlich Java Beans? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben