Statische Klasse: Best practice mit flags (2)

raphw

Mitglied
Hallo Forum,
ich habe mich vor einer Woche schon nach Selbigem erkundigt, aber da sich mein Problem nun noch erweitert hat, wollte ich nocheinmal nachfragen.

Ich habe eine Klasse, die eigentlich nur eine einzige wichtige Methode anbietet, als Argument verwendet sie zwei Strings und ein Flagarray (aus einem eigenen Enum-Typen). Die einzelne wichtige Methode ruft intern aber viele andere Methoden auf, da bei fast 2000 Zeilen Code das ganze sonst nicht mehr lesbar wäre. Nun habe ich ein Problem mit dem transportieren der Flags, denn das beste was mir einfallen würde wäre, das Array an jede Methode mitzugeben. Das würde ich, auf Grund der Lesbarkeit aber gerne vermeiden, da sich die Flags eines Aufrufs nie ändern.

Java:
public class MeineKlasse {

public static float meineMethode(String input1, String input2, Flags... flags) {
...
meineZweiteMethode(...);
...
}

private static int meineZweiteMethode(...) {
...
meineXXXMethode(...);
...
}

}

Ist das übergeben der Flags in wirklich jeder Funktion denn nun wirklich die beste Lösung wenn ich selbige in wirklich beinahe jeder Funktion benötige? Denn wenn ich die Flags in einer statischen Varbiable ablege, werden die Flags ja nicht automatisch zurückgesetzt, das erscheint mir auch unpraktisch. Dazu passiert bei folgendem Aufruf:

Java:
MeineKlasse.meineMethode(..., flags1);
MeineKlasse.meineMethode(..., flags2);

natürlich, dass wenn beide Methoden unter Umständen parallel ablaufen, dass die Variable flags2 auf beide Abarbeitung der Methode angewandt werden, wenn ich die statische Variable zu beginn überschreibe. Das könnte ich zwar mit ThreadLocal verhindert, aber auch das erscheint mir nicht optimal.

Nun geht mein Problem aber noch weiter: Ich würde die Klasse gerne sowohl statisch als auch nicht-statisch anbieten. Also, dass ich mit:

Java:
MeineKlasse foo = new MeineKlasse(flags1);
foo.meineMethode(...);

MeineKlasse.meineMethode(..., flags1);

in beiden Varianten das Gleiche heraus bekomme. Das würde ja grundsätzlich mit überladen funktionieren, allerdings geht das nicht, wenn bis auf das Atribut "static" die Methodenköpfe identisch sind. (Ich will die Flags weiterhin zulassen, um eine vorübergehende Änderung der Standardkonfiguration zuzulassen. Ist eine solche Umsetzung in Java denn überhaupt vorgesehen?

Danke für die Hilfe und viele Grüße, Rafael
 
ich glaube ich habe zur Parameterübergabe alles gesagt was zu sagen ist
http://www.java-forum.org/allgemeine-java-themen/107947-statische-klasse-best-practice-flags.html

und meiner Interpretation nach hat sich dein Problem in der Hinsicht um keinen Millimeter erweitert, dieselbe Frage nochmal..

edit:
am ehesten vielleicht nochmal der deutliche Hinweis, dass du
String input1, String input2
in einem Objekt InputData modellieren kannst, und dann dieses eine Objekt durch alle Methoden durchreichen, da können auch Zwischenwerte der Berechnung gespeichert werden usw.,

wenn dann Flags... flags ein weiteres Attribut von InputData ist, ist das eine minimale Änderung



------

statisch + nicht-statisch zusammmen gleich ergibt keinen Sinn, braucht man auch nie,
verwende nur die statische, oder unterschiedliche Methodennamen
 
Zuletzt bearbeitet von einem Moderator:
Mir scheint hier liegt eher ein suboptimales Design als Problem vor. Fast jede Funktion benötigt alle Flags? Dann kannst du gleich eine Klasse mit einer großen Main-Methode schreiben...

Anscheinend handelt es sich um globale Konfigurationen, die sich zur Laufzeit ändern können? Nutze einen Service, an dem sich jede Klasse die passende Konfiguration erfragen kann. Wenn der synchronisiert ist, gibt es keine Probleme bzgl. konkurrierender Zugriffe. Evtl. ist es ja auch nötig, dass verschiedene Beteiligte über Änderungen an einzelnen Konfigurationen benachrichtig werden (mittels Observer).

"ein Array von Flags"... isch krisch Plaque...
 

Zurück
Oben