我想爲基於Swing的應用程序添加持久性;這是我第一次做這樣的事情。我知道如何使用Java序列化API(儘管我使用的是xstream),但我知道JComponent是可序列化的,但我對更多體系結構考慮感興趣:應如何設計應用程序以使其持久化變得容易;等使Java Swing應用程序持久化
我很樂意看到任何來源有深入考慮這些問題,但我會還高興地聽到明確的一些最佳做法:)
我想爲基於Swing的應用程序添加持久性;這是我第一次做這樣的事情。我知道如何使用Java序列化API(儘管我使用的是xstream),但我知道JComponent是可序列化的,但我對更多體系結構考慮感興趣:應如何設計應用程序以使其持久化變得容易;等使Java Swing應用程序持久化
我很樂意看到任何來源有深入考慮這些問題,但我會還高興地聽到明確的一些最佳做法:)
你應該使用model-view-controller approach。您只能序列化模型,而不是視圖。該視圖應該從模型中填充。序列化Swing組件反正是不建議在所有:
你有什麼看,你應該有一些類,是你的模型,並具有唯一的數據。這些類將在某處使用XStream進行序列化。然後,您的Swing Classes具有接收這些模型類並填充字段和編輯器的方法。然後,您可以擴展UI,而無需更改類,添加更多功能,或爲同一數據集提供不同的視圖。
爲了使它更有趣,Swing組件不應該存儲和加載模型,但是您應該有一個控制器接口,您將其傳遞給swing組件以執行這些操作。這樣,您可以更好地進行單元測試,並將存儲邏輯從視圖邏輯中分離出來。
如果XStream配置正確,並且您注意模型和字段,應該可以在模型類中添加更多字段而不破壞向後兼容性。
我不推薦使用Java序列化,因爲將它用於存儲不是一個好習慣。 Java序列化擅長於遠程方法調用。它是相對脆弱的,當模型類改變..
而且說的javadoc(例如在JComponent):從1.4版本開始,所有JavaBeansTM長期存儲的支持已被添加到java.beans包。請參閱XMLEncoder。
所以參見XMLEncoder。
從vue的體系結構來看,這個序列化最適合於bean,集合和默認值的概念。在bean上,它只保存具有與默認值不同的值的屬性bean。 (對不起,我的英語)
您可以根據需要進行配置。
如果java bean是新的並且用於數據,那麼XMLEncoder是個好主意。否則,我仍然認爲序列化JComponent通常是一種不好的做法。 – 2010-05-27 14:40:29
@MarioOrtegón:是的,我同意;但是人可以將JComponent的「bean版本」看作一個ligth設計模型:沒有聽衆,例如只有顏色,背景,位置......所以,如果我們想序列化/反序列化,就需要重新構建控制器邏輯。我認爲XML編碼器不是很好,但它不是很糟糕。這真有趣 :-) – Istao 2010-05-27 16:11:46