Diversi tipi di impostazioni e persistenza del gestore impostazioni

0

Sto esitando in quale modo di implementazione scegliere nel seguente caso.

Ho un SettingsManager

public interface SettingsManagerContract {
    public void setStringValue(String key, String value);

    void setDoubleValue(String key, Double value);

    void setFloatValue(String key, Float value);

    void setBoolValue(String key, Boolean value);

    void setIntegerValue(String key, Integer value);

    void setLongValue(String key, Long value);

    public String getStringValue(String key, String defaultValue);

    public String getStringValue(String key);


    Integer getIntegerValue(String key);

    Integer getIntegerValue(String key, Integer defaultValue);

    Double getDoubleValue(String key);

    Double getDoubleValue(String key, Double defaultValue);

    Boolean getBooleanValue(String key);

    Boolean getBooleanValue(String key, Boolean defaultValue);

    Long getLongValue(String key);

    Long getLongValue(String key, Long defaultValue);

    <T> T getSettingsByClass(Class<T> settingsClass, String key);

    <T> void saveClassSettings(T object, String key);
}

E ad esempio una classe Settings che viene utilizzata per memorizzare impostazioni separate per una parte specifica di un'applicazione.

public class GeneralSettings {
    // Key constants
    public static final String KEY_LANGUAGE_CODE = "language";

    // Fields
    private Locale languageLocale;

    public static GeneralSettings createFromSettings(SettingsManagerContract settingsManager) {
        GeneralSettings instance = new GeneralSettings();
        String languageCode = settingsManager.getStringValue(KEY_LANGUAGE_CODE, Locale.ENGLISH.getLanguage().toLowerCase());
        instance.languageLocale = new Locale(languageCode, languageCode.toUpperCase());
        return instance;
    }

    public Locale getLanguageLocale() {
        return languageLocale;
    }

    public void setLanguageLocale(Locale languageLocale) {
        this.languageLocale = languageLocale;
        // How to persist automatically ?
    }
}

Come puoi vedere dal codice sopra, sto creando una classe di impostazioni da SettingsManager passata a un metodo statico.

Non so se questo è il modo giusto per seguirlo. Impostazioni Manager non dovrebbe assolutamente essere consapevole della creazione di ogni singola classe di impostazioni, ma d'altra parte una classe di impostazioni utilizza SettingsManager per la creazione stessa.

Un'altra e la domanda più importante sul salvataggio delle impostazioni modificate, in questo caso sto solo impostando un valore sul membro della classe, ma per mantenere le impostazioni devo chiamare SettingsManager e chiedergli di salvare questa classe di impostazioni .

Oppure posso memorizzare un'istanza di SettingsManager come membro della classe e quando il metodo setter è chiamato persiste impostazioni usando l'istanza di SettingsManager

Ma non sono sicuro che questo sia il modo giusto per farlo, d'altra parte questo è il modo più comodo per usare l'app, perché non è necessario effettuare chiamate esplicite a SettingsManager da altre parti di l'applicazione.

Potresti suggerire come trattare tali casi?

Grazie.

    
posta solderingiron 18.02.2018 - 13:12
fonte

0 risposte