java - 使 Java Swing 应用程序持久化

标签 java swing architecture persistence

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

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

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

最佳答案

你应该使用 model-view-controller approach .您只序列化模型,而不是 View 。 View 应该从模型中填充。无论如何,根本不推荐序列化 Swing 组件:

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

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

为了让它更漂亮,Swing 组件不应存储和加载模型,但您应该有一个 Controller 接口(interface),您将其传递给 swing 组件以执行这些操作。这样,您可以更好地进行单元测试,并将存储逻辑与 View 逻辑分离。

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

无论如何我都不建议使用 Java 序列化,因为将它用于存储不是一个好习惯。 Java 序列化在远程方法调用方面表现出色。当模型类改变时它相对脆弱..

关于java - 使 Java Swing 应用程序持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921375/

相关文章:

java - 使用 ActionListener 更改 JTextField 的颜色

java - 我可以在一台 PC 上运行多个 JVM 吗?

java - 使用 OTA 从测试计划中获取测试用例

java - java中带参数的jFrame表单调用jpanel表单

java - 在 JTabbedPane header 中添加一个 JLabel

android - 在 MVI 中访问 reducer 函数之外的状态

java - 设计AppServer面试讨论

architecture - 将 F# 集成到现有的 .Net 应用程序中

java - 为什么在循环使用字段引用之前将其复制到本地?

java命令行flyway迁移