1 chiave, 1 oggetto sarà più prevedibile per quanto riguarda l'interazione con il server dell'app e le possibili tecniche di replica della sessione. Non sei sicuro di cosa intendi per "set di stringa statica finale" che è necessario. Puoi gestire le chiavi di sessione in qualsiasi modo.
Considera che hai 20 preferenze, e forse la tua classe di preferenze ha un enum di nomi di preferenze. Potrebbe ottenere / impostare una sessione un po 'indirettamente:
class Preferences {
private static final SESSION_KEY_PREFIX = Preferences.class.getName()+'.';
enum Name {
LOCALE,
...
}
static String get(HttpSession session, Name name) {
return (String)session.getAttribute(SESSION_KEY_PREFIX + name.name());
}
static void set(HttpSession session, Name name, String value) {
session.setAttribute(SESSION_KEY_PREFIX + name.name(), value);
}
static void clear(HttpSession session) {
for(Name name : Name.values()) {
session.removeAttribute(SESSION_KEY_PREFIX + name.name());
}
}
}
Puoi aggiungere le preferenze semplicemente aggiungendo all'enumerazione e tutte le interazioni specifiche con la sessione sono incapsulate.
Questo esempio è piuttosto banale, quindi la classe Preferences stessa potrebbe anche diventare un enum, senza un enum separato di "Nome". Quale potrebbe essere:
enum Preference {
LOCALE,
....;
private final String sessionKey = Preference.class.getName()+'.'+name();
String get(HttpSession session) {
return (String)session.getAttribute(sessionKey);
}
void set(HttpSession session, String value) {
session.setAttribute(sessionKey, value);
}
static void clear(HttpSession session) {
for(Preference pref : Preference.values()) {
session.removeAttribute(pref.sessionKey);
}
}
}