Diese 3-stufige Konfiguration ist schon eine tolle Idee. Bisher habe ich nur 2-stufig mit Defaultwerten und Konfigurationsdatei oder Kommandozeilenparameter oder Initialisierungsparametern (Applet, web.xml, struts-config.xml) gearbeitet.
Die Defaultwerte im Code unterzubringen, halte auch ich für extrem wichtig, denn es sind ja Defaultwerte, die unabhängig von äußeren Gegebenheiten einen nahezu fehlerfreien Programmablauf garantieren sollen.
Mit meiner bisherigen Erfahrung kann ich nur raten, diese Defaultwerte stets gut sichtbar zu programmieren und nicht mitten in den Code zu packen!
Einen guten Programmierstil erkennt man auch daran, daß via Interfaces kommuniziert wird und das Programm automatisch erkennt, ob es die Defaultwerte oder die Konfigurationsparameter verwenden soll.
Beispiel:
Die Defaultwerte im Code unterzubringen, halte auch ich für extrem wichtig, denn es sind ja Defaultwerte, die unabhängig von äußeren Gegebenheiten einen nahezu fehlerfreien Programmablauf garantieren sollen.
Mit meiner bisherigen Erfahrung kann ich nur raten, diese Defaultwerte stets gut sichtbar zu programmieren und nicht mitten in den Code zu packen!
Einen guten Programmierstil erkennt man auch daran, daß via Interfaces kommuniziert wird und das Programm automatisch erkennt, ob es die Defaultwerte oder die Konfigurationsparameter verwenden soll.
Beispiel:
Code:
public Interface Mirror {
public String getType();
public int getHight();
public int getWidth();
public float getWeight();
public boolean isBroken();
}
Code:
public class DefaultMirror implements Mirror {
public DefaultMirror() {
}
public String getType() {
return "Standardspiegel";
}
public int getHight() {
return 200;
}
public int getWidth() {
return 100;
}
public float getWeight() {
return 13.9f;
}
public boolean isBroken() {
return false;
}
}
Code:
public class SpecialMirror extends DefaultMirror {
private File config;
private Properties prop;
public SpecialMirror(File config) {
super();
this.config = config;
}
private boolean init() {
if (config == null) return false;
if (prop == null) {
prop = new Properties();
try {
prop.load(new FileInputStream(config));
}
catch (IOException ioe) {
return false;
}
}
return prop != null;
}
public String getType() {
return (init())? prop.get("type"): super.getType();
}
public int getHight() {
return (init())? prop.get("height"): super.getHight();
}
public int getWidth() {
return (init())? prop.get("width"): super.getWidth();
}
public float getWeight() {
return (init())? prop.get("weight"): super.getWeight();
}
public boolean isBroken() {
return (init())? prop.get("broken"): super.isBroken();
}
}
Code:
public static void main(String a[]) {
Mirror mirror;
if (a.length > 0) {
mirror = new SpecialMirror(a[0]);
}
else {
mirror = new DefaultMirror();
}
System.out.println(mirror.getClass()); //was sich dahinter verbirgt
System.out.println(mirror.getType()); //Typ des Spiegels
}