2016-04-26 205 views
1

在我的申請,我有一個key-value存儲,實現用戶配置(一拉阿帕奇百科全書配置):重寫qx.core.Object#綁定

var config = new Configuration(); 
config.set("foo.bar", "baz"); 
config.get("foo.bar"); // "baz" 

帶點名稱用於引入配置層次結構。我也想要以下工作:

config.bind("foo.bar", target, "property.chain"); 

這裏的想法是使用傳統的qooxdoo綁定語義;不同的是,「foo.bar」並不表示一個真正的產業鏈,它只是一個關鍵的名稱。

我該如何實施?用我的實現完全覆蓋qx.core.Object#bind可以嗎?或者,我應該如何以標準qx.core.Object#bind(委託給qx.data.SingleValueBinding)的方式爲Configuration類的內部建模?第二種情況可能涉及一些生成的類(類似於qx.data.marshal.Json#toClass),以反映具有真實屬性的關鍵名稱。坦率地說,這對我來說似乎有點複雜。你怎麼看?

回答

3

更換綁定機制不是一個簡單的任務,但它是單向的 - 例如,當你可以重寫bind()的允許從你的配置結合,你將無法從某些屬性綁定回分成的配置。很明顯,這取決於你的應用程序是否有用,但是(例如)如果你想構建一個配置編輯器UI,標準的表單綁定根本不起作用。

或者,您可以將您的配置對象構建爲一個實際的類,這有幾個優點 - 雙向綁定可以工作,您可以擁有強制數據類型的屬性,事件,應用方法,可以用反射來檢查結構,等等。

另一方面,能夠創建(而忘記)簡單的設置通常是非常有用的,而不必爲每個設置創建一個正式的API結構。

因此,最終你的milage可能會有所不同,因爲它取決於你想要存儲的數據,隨着應用程序複雜性的增加,你希望存儲的數據也可能變得更加複雜,難以存儲在簡單字符串/值對。