使Java Swing应用程序持久化

时间:2010-05-27 13:12:21

标签: java swing architecture persistence

我想为基于Swing的应用程序添加持久性;这是我第一次这样做。

我知道如何使用Java序列化API(虽然我使用的是xstream),我知道JComponent是可序列化的,但我对更多的体系结构考虑感兴趣:应该如何设计应用程序以使其持久化简单;等

我很高兴看到有任何消息来源深入考虑这些问题,但我也很高兴听到一些明确的最佳实践:)

2 个答案:

答案 0 :(得分:7)

您应该使用model-view-controller approach。您只序列化模型,而不是视图。应从模型中填充视图。无论如何,根本不建议序列化Swing组件:

  

While Swing components do implement the Serializable interface, they are not portable between different versions of the Java Virtual Machine

看看你有什么,你应该有一些你的模型类,只有数据。这些类将在某处使用XStream进行序列化。然后,您的Swing Classes有方法来接收这些模型类并填充字段和编辑器。然后,您可以扩展UI,例如,无需更改类,添加更多功能,或为同一数据集提供不同的视图。

为了让它变得更加漂亮,Swing组件不应该存储和加载模型,但是你应该有一个控制器接口,你可以将它传递给swing组件来执行这些操作。这样,您可以更好地进行单元测试,并将存储逻辑与视图逻辑分离。

如果正确配置了XStream,并且您对模型和字段非常小心,那么应该可以在不破坏向后兼容性的情况下向模型类添加更多字段。

我建议不要使用Java Serialization,因为将它用于存储不是一个好习惯。 Java Serialization擅长远程方法调用。当模型类改变时,它相对脆弱。

答案 1 :(得分:0)

javadoc说(例如在JComponent上):从1.4开始,java.beans包中添加了对所有JavaBeansTM的长期存储的支持。请参阅XMLEncoder。

请参阅XMLEncoder

从vue的架构角度来看,这个序列化最适合bean,集合和默认值的概念。在bean上,它仅保存具有与默认值不同的值的属性bean。 (对不起我的英文)

您可以根据需要进行配置。