2010-05-06 50 views
-2

我有一個模型(MVC)類,它的內部狀態(基本上包含私有的int字段)我想存儲。透明地存儲類狀態而不暴露實現

該程序在Android上運行(現在),所以我需要將其存儲在Bundle中,但是稍後我將在桌面應用程序中使用相同的類,我必須以其他方式存儲狀態,所以我不能直接在我的課上參考Bundle

所以我的問題是:什麼是最好的方式來存儲(和檢索)一個類的狀態而不暴露它的實現?

我能想到的最好的辦法是刪除private訪問修飾符,以便字段可以被包訪問,並在同一個包中創建讀/寫助手類,但這似乎是錯誤的。

回答

1

我不熟悉Android上的持久性機制,但總的來說,將持久性邏輯(即存儲對象狀態的代碼)與實際包含數據的域對象分開是個好主意。例如,這是JPA和幾乎所有現代Java對象關係映射工具所採用的方法。所以是的,在您的域類中直接引用Bundle對象聽起來並不是正確的策略,特別是如果您打算在非Android環境中使用相同的類時。

我的建議是對象的狀態序列化爲XML,這是可跨環境。有許多開源工具可以幫助您輕鬆實現,並且不需要在您的域類中使用任何特殊代碼。我最熟悉的兩個是JiBXCastor。我不知道是否可以在Android上工作,但即使Android有自己的工具來將對象轉換爲XML,也可以在桌面上使用JiBX或Castor,因爲它們可以適應多種不同的XML格式。

一旦你有了XML形式的數據,則可以使用任何手段是最合適的目標環境中持久存在。在桌面應用上,這可能意味着用戶主目錄中的文件。在Android上,我想這會是捆綁銷售,但那不是我的專業領域。祝你好運!

+0

'Bundle'基本上是一個'地圖<字符串,對象>'與'Object'限於字符串,原始類型和這些陣列的對象的形式。我可以將我的對象的XML表示存儲在那裏,這樣就可以工作。感謝您的想法(也eMgz)! – RoToRa 2010-05-06 14:30:20