Grüße euch!!
Heute hätte ich mal eine Designfrage. Ein recht interessanter Thread, der die Diskussion in eine ähnliche Richtung führt findet sich hier:
java - Why are static variables considered evil? - Stack Overflow
Es geht mir darum, dass ich bisher einen relativ großen Teil meiner Variablen die ich als "statisch" verstanden auch als solches definiert habe. Unter dem Aspekt das sie entweder zur Laufzeit gesetzt und nicht mehr geändert werden oder das sie sich zur Laufzeit ändern können und einen momentanen Zustand ausdrücken, der Einfluss auf mehrere Abläufe nimmt.
Nun stelle ich mir die Frage, wie ich das Ganze straightforward konstruieren könnte, um Lesbarkeit, Threadsavety und ähnliches zu erhalten, bzw. Fehler durch global state zu vermeiden. Einen Schritt den ich getan hatte, war es einen Großteil in Enums abzulegen, um in diesen die Werte zu schreiben.
Bsp. Code:
Durch
kann ich mich auf diese Weise über die Enum Bezeichner zum gewünschten Wert hangeln. Jetzt könnte man natürlich auch die Werte direkt als final static bspw. setzen oder als static, falls sie sich ändern könnten. Zudem habe ich auch Werte, die ich gern ohne neuen build anpassen würde. Für diesen Fall würde ich eine properties file setzen.
Nun kann ich aber bspw. nicht in der properties file Instanzen einer BufferedImage vorhalten. Letztlich also nur den Pfad und die Objektinstanz vorhalten. Statisch oder an ein anderes Objekt gebunden.
Meine Frage ist nun eigl. recht simpel. Wie würdet ihr den Aufbau solch zum Teil finaler Werte vornehmen und jener, die sich zur Laufzeit ändern können. Ich wäre geneigt für die sich ändernden Werte eine Objektinstanz zu veranschlagen, bspw. eine Config Instanz. Abgesehen davon müsste der Zugriff aber dennoch easy to read sein. So wie mir das bisher eigl. mit den Enums ganz gut gefällt, die aber prinzipiell nicht an ein Objekt gebunden sind.
Abgesehen davon missfällt mir bei der properties file die Verwendung von Strings um die Werte abzugreifen - ich wäre versucht den Inhalt (Integer, Strings, usw.) wieder in Enum Instanzen zu schreiben, um den Pfad zu der entsprechenden Information leicht lesbar zu halten.
Ich freue mich auf eure Antworten.
LG
tuedel
Heute hätte ich mal eine Designfrage. Ein recht interessanter Thread, der die Diskussion in eine ähnliche Richtung führt findet sich hier:
java - Why are static variables considered evil? - Stack Overflow
Es geht mir darum, dass ich bisher einen relativ großen Teil meiner Variablen die ich als "statisch" verstanden auch als solches definiert habe. Unter dem Aspekt das sie entweder zur Laufzeit gesetzt und nicht mehr geändert werden oder das sie sich zur Laufzeit ändern können und einen momentanen Zustand ausdrücken, der Einfluss auf mehrere Abläufe nimmt.
Nun stelle ich mir die Frage, wie ich das Ganze straightforward konstruieren könnte, um Lesbarkeit, Threadsavety und ähnliches zu erhalten, bzw. Fehler durch global state zu vermeiden. Einen Schritt den ich getan hatte, war es einen Großteil in Enums abzulegen, um in diesen die Werte zu schreiben.
Bsp. Code:
Java:
public enum Fonts {
FOOTER_MARK, FOOTER_DEFAULT, FOOTER_DATE,
FOOTER_MATCH_RACE_BTN, FOOTER_MATCH_RACE_TEXT;
private Font localFont;
public Font getValue() {
return localFont;
}
private void setValue(Font newFont) {
localFont = newFont;
}
}
private void initFonts(){
font_raceTimer = Font.createFont(Font.TRUETYPE_FONT, givenpath);
Fonts.FOOTER_MARK.setValue(font_raceTimer.deriveFont(Font.BOLD, 15));
Fonts.FOOTER_DATE.setValue(font_raceTimer.deriveFont(Font.BOLD, 15));
}
Durch
Java:
Fonts.COLOR_CHOOSER.getValue();
kann ich mich auf diese Weise über die Enum Bezeichner zum gewünschten Wert hangeln. Jetzt könnte man natürlich auch die Werte direkt als final static bspw. setzen oder als static, falls sie sich ändern könnten. Zudem habe ich auch Werte, die ich gern ohne neuen build anpassen würde. Für diesen Fall würde ich eine properties file setzen.
Nun kann ich aber bspw. nicht in der properties file Instanzen einer BufferedImage vorhalten. Letztlich also nur den Pfad und die Objektinstanz vorhalten. Statisch oder an ein anderes Objekt gebunden.
Meine Frage ist nun eigl. recht simpel. Wie würdet ihr den Aufbau solch zum Teil finaler Werte vornehmen und jener, die sich zur Laufzeit ändern können. Ich wäre geneigt für die sich ändernden Werte eine Objektinstanz zu veranschlagen, bspw. eine Config Instanz. Abgesehen davon müsste der Zugriff aber dennoch easy to read sein. So wie mir das bisher eigl. mit den Enums ganz gut gefällt, die aber prinzipiell nicht an ein Objekt gebunden sind.
Abgesehen davon missfällt mir bei der properties file die Verwendung von Strings um die Werte abzugreifen - ich wäre versucht den Inhalt (Integer, Strings, usw.) wieder in Enum Instanzen zu schreiben, um den Pfad zu der entsprechenden Information leicht lesbar zu halten.
Ich freue mich auf eure Antworten.
LG
tuedel