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.