Designfrage: Statische Konfigurationsklasse

Status
Nicht offen für weitere Antworten.

heart_disease

Bekanntes Mitglied
Ich arbeite schon länger an einem Medien-Management-System für eine Firma. Die erste stabile Version habe ich letztes Jahr fertiggestellt und arbeite nun wieder daran weiter. Eine der größeren Änderungen war die Umstellung der Konfigurationsdateien auf eine kompakte XML-Datei und das Einführen einer neuen Konfigurationsklasse. Allerdings hatte ich nicht viel Ahnung wie ich die am Besten statisch gestalten soll, da die Daten von überall verfügbar sein müssen und die Konfigurationsdateien doch nur einmal eingelesen werden sollen.

Deshalb habe ich daraus ein Singleton gemacht:
Java:
WFLConfReader.getInstance().meineMethode()

Ich bin damit allerdings nicht allzu zufrieden, da der Code dadurch sehr unübersichtlich werden kann. Der Oberhammer sind dann zB solche Zeilen:
Java:
WFLConfReader.getInstance().getWorkingDirectory( WFLConfReader.MT_NEWS )

Nun habe ich schon überlegt ob ich die Klasse nicht komplett statisch mache und die Konfigurationsdateien in einem static-Block einlesen lasse. Allerdings habe ich Bedenken dass das vlt. nicht unbedingt sauber ist ...
 
S

SlaterB

Gast
in jedem Falle könntest du statische Methoden einführen, die gegebenenfalls selber auf das Singleton zugreifen,
dürften dann aber wahrscheinlich nicht exakt denselben Namen + gleiche Parameterliste haben,

und ne Variable ist auch nicht verboten:
WFLConfReader conf = WFLConfReader.getInstance();
conf.getWorkingDirectory( WFLConfReader.MT_NEWS )

ganz normaler Methodenaufruf, die Konstante MT_NEWS kann man kaum anders machen
 

heart_disease

Bekanntes Mitglied
Hm, deine Lösung mit der Klassenvariable gefällt mir eigentlich ganz gut.

Ich hätte mir das dann so gedacht:
Java:
public class MeineKlasse {
	private final static WFLConfReader conf = WFLConfReader.getInstance();

	...
}
 

Marco13

Top Contributor
Man könnte zwar mit "static imports" ein paar Zeichen sparen, aber an sich ist das ja noch nicht schlimm. Viel gefährlicher finde ich das Konstrukt an sich. Ich durfte zumindest mal einen statischen Konfigurationsblock mit ca. 200 Einträgen in mühsamster Handarbeit aufdröseln, um rauzufinden, wo die ganzen Fields eigentlich hingehörten :wuerg:
 

Landei

Top Contributor
Du kannst die Klasse natürlich auch mit Dependency Injection automagisch übergeben lassen (z.B. mit Google Guice), aber vermutlich ist das mit Kanonen auf Spatzen. Aber *wenn* sie irgendwann mal gegen eine andere Implementierung ausgetauscht werden muss (z.B. für Unit-Tests), hat sich der Aufwand gelohnt.
 

heart_disease

Bekanntes Mitglied
Mir ist gerade noch eine bessere Idee eingefallen. Meine Auftraggeber wollen nämlich, dass abhängig von der Abteilung des Benutzers eine andere Konfigurationsdatei verwendet werden soll. So wäre es nach meiner Überlegung am besten die ganze Klasse statisch zu machen und eine Art Initialisierungs-Methode einzuführen. Die würde dann genau einmal zu Beginn des Programms mit einem Parameter aufgerufen werden - nämlich mit der entsprechenden Konfigurationsdatei.
 
B

bygones

Gast
Mir ist gerade noch eine bessere Idee eingefallen. Meine Auftraggeber wollen nämlich, dass abhängig von der Abteilung des Benutzers eine andere Konfigurationsdatei verwendet werden soll. So wäre es nach meiner Überlegung am besten die ganze Klasse statisch zu machen und eine Art Initialisierungs-Methode einzuführen. Die würde dann genau einmal zu Beginn des Programms mit einem Parameter aufgerufen werden - nämlich mit der entsprechenden Konfigurationsdatei.
ich wuerde dennoch Landeis ueberlegung in Betracht ziehen und das ganze ueber DI probieren.

Nix ist schlimmer wenn man seine Tests erstellen will und man dann von irgendwelchen statischen Aufrufen ausgebremst wird...
 
M

maki

Gast
Mir ist gerade noch eine bessere Idee eingefallen. Meine Auftraggeber wollen nämlich, dass abhängig von der Abteilung des Benutzers eine andere Konfigurationsdatei verwendet werden soll. So wäre es nach meiner Überlegung am besten die ganze Klasse statisch zu machen und eine Art Initialisierungs-Methode einzuführen. Die würde dann genau einmal zu Beginn des Programms mit einem Parameter aufgerufen werden - nämlich mit der entsprechenden Konfigurationsdatei.
Weiss nicht ob ich da wirklich "Konfigurationsdateien" verwenden würde, scheint doch mehr zu betreffen als eine normale Konfiguration, verhalten abhängig vom der Abteilung eines Users würde ich wohl eher als Klassen umsetzen(zB. Strategy Muster).

Nix ist schlimmer wenn man seine Tests erstellen will und man dann von irgendwelchen statischen Aufrufen ausgebremst wird...
Sehe ich auch so.
 

heart_disease

Bekanntes Mitglied
Nix ist schlimmer wenn man seine Tests erstellen will und man dann von irgendwelchen statischen Aufrufen ausgebremst wird...
Ahm, ... ich weiß ich muss in Sachen Projektmanagement noch viel dazulernen ^^' *hüstel*
Meine Testklassen sind bislang noch sehr spärlich und weiß nichtmal ob diese Testklassen überhaupt richtige Testklassen sind. Wir haben in Info zwar mal Software Engineering durchgemacht, aber die wirklich wichtigen Dinge (Logging, Testklassen, ...) haben wir nie behandelt.

EDIT: Ich weiß jetzt was du meinst (bzgl. Testklassen) ^^


Weiss nicht ob ich da wirklich "Konfigurationsdateien" verwenden würde, scheint doch mehr zu betreffen als eine normale Konfiguration, verhalten abhängig vom der Abteilung eines Users würde ich wohl eher als Klassen umsetzen(zB. Strategy Muster).
Ich werde aus dem Wikipediaartikel nicht ganz schlau was Strategy Muster überhaupt genau sind. Bezüglich der Konfiguration: es ändern sich dadurch lediglich die Pfade zu den Medienverzeichnissen.

Kann mir vlt. jemand gute (wenn möglich Online)Literatur zu diesem Thema empfehlen? Ich hab' wie gesagt noch nicht allzuviel Ahnung davon und bin bisher auch über Google nicht fündig geworden.


EDIT2: Ich habe die Konfigurationsklasse voerst doch einmal statisch implementiert; vlt. fällt mir später noch eine bessere Lösung ein. Danke auf jeden Fall für eure Tipps und Ratschläge! :)
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
F.S.WhiTeY Designfrage bzw. Meinung zur Umsetzung Allgemeine Java-Themen 39
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
E Wie anfangen? Konzept / Designfrage Allgemeine Java-Themen 17
sliwalker Designfrage: Dateninhalte in Komponenten variabel halten Allgemeine Java-Themen 4
N DesignFrage FactoryPattern Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
A Designfrage zu Dateimanager Allgemeine Java-Themen 4
O Designfrage Allgemeine Java-Themen 6
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
T Designfrage: Audiochat Allgemeine Java-Themen 3
S Designfrage Allgemeine Java-Themen 3
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
S Kapselung Statische Helper Klassen Allgemeine Java-Themen 5
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
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

Ähnliche Java Themen

Neue Themen


Oben