我正在編寫一個類,將被序列化以保存在數據庫中,並通過網絡發送一個程序。地圖與類屬性的建議
爲了使通過命令行界面訪問類屬性變得更容易,我正在考慮將屬性存儲在Map類中,而不是爲每個屬性賦予它自己的變量。
基本上,而不是使用這樣的:
String id = account.getUserId();
我會做這個
String id = account.properties.get("userId");
這是做事情的方式最好?
我正在編寫一個類,將被序列化以保存在數據庫中,並通過網絡發送一個程序。地圖與類屬性的建議
爲了使通過命令行界面訪問類屬性變得更容易,我正在考慮將屬性存儲在Map類中,而不是爲每個屬性賦予它自己的變量。
基本上,而不是使用這樣的:
String id = account.getUserId();
我會做這個
String id = account.properties.get("userId");
這是做事情的方式最好?
是的,這是一個非常合理的模型。它有時被稱爲「prototype object model」,與您在JavaScript中工作的方式非常相似,其中每個對象實際上都是一個Map。這反過來導致了非常流行的JSON序列化格式。
不錯的功能:
潛在的風險/缺點:
我實際使用一個變種OG寫於90年代的整個遊戲這個對象模型(Tyrant),它工作得很好。
然而,您可能需要考慮封裝此功能,以便您可以在對象本身上使用訪問方法,例如,
String id = account.getProperty("userId");
謝謝!我感覺更好地推進這一點。 –
如何我喜歡做這往往是這樣的:
enum StringPropertyType {
USERID, FIRSTNAME, LASTNAME
}
interface StringAttributes {
String get(StringPropertyType s);
void put(StringPropertyType s, String value);
}
class MapBasedStringAttributes implements StringAttributes {
Map<StringPropertyType, String> map = new HashMap<~>();
String get(StringPropertyType s) { return map.get(s); }
void put(StringPropertyType s, String value) { map.put(s,value); }
}
這給你編譯時的安全性,重構等
,你也可以使用stringPropertyType。名稱()來獲取枚舉值的字符串表示,並使用
Map<String,String>
,而不是..
非常感謝!我只能給一個答案一個綠色支票,但如果我能做得更多,你也會得到一個。 –
不用擔心,我不在意......如果您還有其他問題,我會很樂意詳細說明 – ianpojman
我建議如上面做的,而是用枚舉的,而不是字符串 –