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;
   }
 
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
 
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.
 
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.
 

Neue Themen


Zurück
Oben