Anwendungen dreistufig konfigurierbar machen

Thomas Darimont

Erfahrenes Mitglied
Hallo!

Vor einiger Zeit hab mir ein genialer Geist die Kunst der dreistufigen Konfigurierbarkeit offenbart. Mit dreistufiger Konfigurierbarkeit meine, das Anwendungen sich auf drei Stufen konfigurieren lassen koennen. ;-)

1) Per Defaultwerten in dem Anwendungscode selbst.
2) Per Konfigurationsdatei
3) Per Kommandozeilenschalter / Umgebungsparameter

Hierbei ist es nun so, dass sich verschiedene Konfigurationsstufen ueberschreiben duerfen.
Sagen wir mal, dass die Konfiguration Stufen 1),2) und 3) folgende Vorangsrelation aufweisen: 3)>2)>1). Es wird nun immer der Konfigurationswert der groesseren Stufe gezogen.

Beispiel:
Wir haben 3 Konfigurierbare Optionen:
A, B und C
Ihre Default Werte (1): A=1000, B =50, C=-1

Zusatzlich finden sich in einer zusaetzlichen Konfigurationsdatei (2)
Noch folgende Werte fuer die Optionen B und C: B = 1111 und C = 21

Ausserdem wird der Anwendung noch der Umgebungsparameter c=42 uebergeben.

Die effektive Konfiguration ergibt nun:
A=1000
B=1111
C=42

Das Ganze laesst sich dann ueber ein wenig ReflectionMagic realisieren.
Zu vollen Qualifizierung der jeweiligen Optionen bieten sich der FQCN + der Name des Attributs an.

Was haltet ihr von diesem Ansatz...?

Gruss Tom
 
Hi Tom,

ich würde deine Default-Werte auch noch in eine Default-Konfigurationsdatei auslagern, ist meiner Meinung nach, noch etwas schicker.

Ansonsten stimmt das natürlich mit deiner Drei-Faltigkeit.

Einen Konfigurations-Dialog könnte man natürlich auch benutzen.

Grüße, Patrick
 
Hallo!

ich würde deine Default-Werte auch noch in eine Default-Konfigurationsdatei auslagern, ist meiner Meinung nach, noch etwas schicker.
Das finde ich nicht so schick. Wenn die Default-Werte im Code sind, dann ist man auch gegen Probleme mit dem Konfigurationsfile gefeilt (Datei nicht vorhanden, korrupt...etc)
Ausserdem kann man die Hierarchie ja frei definieren (man kann ja immer Stufen hinzufuegen etc. [wenn man will]). Man kann die Defaultwerte in den Anwendungskomponenten ja mit "Distributionsdefaultwerten" in dem Konfigurationsfile ueberschreiben. Weiterhin sind es ja wirklich nur default Werte die ja nur dann gezogen werden, wenn kein Konfigurationsfile oder ein entsprechender Umgebungsparameter verfuegbar ist.

Gruss Tom
 
Was ist denn FQCN?

Ich weiß jetzt nicht ob ich das richtig verstanden hab. Programmiert man das jetzt so, also dass ich sage wenn die Datei vorhanden, dann nimm diese werte und wenn nicht dann nimm die Default-Werte oder sollte man das auf eine bestimmte Art machen?
 
Man kommt teilweise an Defaultwerten im Code gar nicht vorbei, da - wie gesagt - nicht immer davon ausgegangen werden kann, dass die config datei vorliegt, ist zumindest bei dem Programm, das ich gerade schreibe so.

Mir erschließt sich allerdings gerade nicht der Sinn der Umgebungsparameter, vielleicht steh ich aber auch gerade nur auf dem Schlauch :confused:
 
Könntest du mir bitte noch kurz erklären was ein "Voll qualifizierter Klassenname" ist? Ich hab das bis jetzt noch nicht gehört.
 
Hallo!

Ein Vollqualifizierter Klassenname schaut besteht auf package-Prefix.Klassename:
Package: de.tutorials
Klassenname: Foo
FQCN: de.tutorials.Foo

Mit "Umgebungsparameter" meine ich einen JVM Parameter...
java -Dde.tutorials.SomeClass.someField=50 de.tutorials.SomeApp
Nun kann ich innerhalb meiner Anwendung mit System.getProperty("de.tutorials.SomeClass.someField"); auf diesen einen Parameter zugreifen...

Gruss Tom
 
Könntest du mir bitte noch kurz erklären was ein "Voll qualifizierter Klassenname" ist? Ich hab das bis jetzt noch nicht gehört.
 
Thomas Darimont hat gesagt.:
Hallo!

Mit "Umgebungsparameter" meine ich
java -Dde.tutorials.SomeClass.someField=50 de.tutorials.SomeApp
Nun kann ich innerhalb meiner Anwendung mit System.getProperty("de.tutorials.SomeClass.someField"); auf diesen einen Parameter zugreifen...

Gruss Tom


Mist, das hätte ich mal eher wissen sollen, hab mir jetzt ne statische Basis Klasse geschrieben, die Instanzen für Log, Einstellungen aus XML lesen usw bereithält. Funktionier aber auch ganz gut so. hm ... so gesehen hab ich glaubig dreistufige Konfigurierung eingebaut ohne es zu merken :suspekt:
 
Zurück