Schlüsselworte Einstellungen dynamisch deserialisieren

fc90

Mitglied
Hallo zusammen,

ich sitze jetzt schon eine Weile vor einem Problemchen und habe leider mittlerweile keine Idee mehr wie ich das effizient gelöst bekomme. Ich hoffe mir kann da jemand helfen.

Ich habe eine Reihe von Einstellungen die ich dynamisch laden möchte. Dazu habe ich mir schon eine Singleton-Klasse gemacht aus der ich die Einstellungen dann abrufen kann.

Jede Einstellungs-Klasse erbt von dieser Klasse:
Java:
public abstract class SettingsManager implements Serializable{

    private String name;
    private String fileName;

    public SettingsManager(String name) {
        this.name = name;
        this.fileName = "settings" + File.separator + name + ".set";
    }
    
    public String getName()
    {
        return name;
    }

    public String getFileName() {
        return fileName;
    }

}

Zur Zeit deserialisiere ich die Klassen immer beim Programmstart (alle auf einmal). Nun würde ich gerne wenn ich Singleton-Klasse.getInstance().getEinstellung() mache automatisch die entsprechende Einstellung geladen haben wollen. Geht sowas? Und wenn ja wie?

Schon im Vorraus Danke für jede Hilfe.
 
Dazu habe ich mir schon eine Singleton-Klasse gemacht aus der ich die Einstellungen dann abrufen kann.

Jede Einstellungs-Klasse erbt von dieser Klasse:
Ein Singleton das vererbt und (de-)serialisiert wird? Das passt nicht so wirklich... 😉

Die ganze Idee mit Serialisieren ist suboptimal. Schau dir mal die Java Preferences API an.
 
Das Singleton verwaltet mir nur die ganze Sache mit der (De)-Serialisierung. Es wird selbst nicht mit abgespeichert.

Mit der Prefences API hatte ich mich auch schon mal beschäftigt, aber die fand ich für mein Problem nicht so toll. Ich werde es mir aber jetzt noch einmal genauer anschauen und ein bisschen testen.
Vielen Dank für deinen Hinweis.
 
Serialisierung ist IMO immer eine schlechte Form der Persistenz, da du dich an eine ganz konkrete Implementierung bindest und diese auch später nicht mehr einfach ändern kannst.
Serialisieren ist ok für Objekte übers Netzwerk zu schicken, oder ins Clipboard zu packen, aber Persistenz, eher nicht.
 
Das hatte ich leider schon zu spüren bekommen, weil jedes Mal wenn an den Einstellungen auch nur das Kleinste geändert wurde mussten die Nutzer alles neu einstellen.

Zwei Probleme habe ich aber noch:
1. Wie setze ich am besten Standardeinstellungen? (für den Fall ein Wert existiert noch nicht, oder ist leer)
Sollte ich da am besten eine Klasse zwischenschalten, die prüft ob die Einstellung vorhanden ist und sonst das ganze aus einem Standard-Properties-File lädt?

2. Ich hatte vorher bestimmte Klassen (in meinem Fall beispielsweise Fahrzeuge mit bestimmten Eigenschaften) direkt als Klasse deserialisiert. Benennt man da die Einstellungen direkt einfach mit car1, car2, usw.? Oder gibt es da eine sinvollere Möglichkeit?
 
Zuletzt bearbeitet:
1. Wie setze ich am besten Standardeinstellungen? (für den Fall ein Wert existiert noch nicht, oder ist leer)
Sollte ich da am besten eine Klasse zwischenschalten, die prüft ob die Einstellung vorhanden ist und sonst das ganze aus einem Standard-Properties-File lädt?
In der Java Preferences API übergibt man den Default direkt beim Aufruf. Das bedeutet dann, gib mir den Wert wenn vorhanden, ansonsten den Default.
Preferences (Java 2 Platform SE v1.4.2)

2. Ich hatte vorher bestimmte Klassen (in meinem Fall beispielsweise Fahrzeuge mit bestimmten Eigenschaften) direkt als Klasse deserialisiert. Benennt man da die Einstellungen direkt einfach mit car1, car2, usw.? Oder gibt es da eine sinvollere Möglichkeit?
Java Preferences ist eine Baumstruktur mit benamsten Knoten. Du kannst also zB den Klassennamen als Schlüssel für den Knoten verwenden der die Properties für die Klasse enthält.
 

Neue Themen


Zurück
Oben