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