【问题标题】:What is the best way to reliable store a complex Java object hierarcy?可靠存储复杂 Java 对象层次结构的最佳方法是什么?
【发布时间】:2015-07-24 11:11:48
【问题描述】:

我目前正在开发一种软​​件,用户可以在其中定义复杂的对象层次结构作为设置。 此外,此设置对象将为其他开发人员提供接口作为 API。 现在我想存储这些设置并重新加载它。

我目前正在考虑不同的方法来做到这一点,但我认为我的解决方案都不是“好”的。

主要目标应该是:

  1. 它应该输出一个字符串,因为我更喜欢人类可读的配置而不是快速配置。
  2. 即使代码发生变化,它也应该可靠。这意味着它不应该做魔术,但很明显,更改可能会破坏已存储的配置。 (例如,如何防止我的同事重命名班级并破坏生产。)
  3. 存储和加载应该使用对象、接口和泛型。
  4. 将存储内容的配置保持在尽可能低的水平。我更喜欢约定优于配置

我知道你们中的许多人在开发过程中遇到了相同或类似的问题。

那么您的解决方案是什么?您使用了哪个框架以及为什么?

我想出的所有解决方案要么不依赖,要么配置庞大,要么代码太多。

所以我期待从你们所有人那里获得关于这个主题的一些好的新观点。

谢谢。

【问题讨论】:

  • none of my solutions are "good" in my opinion 例如?
  • 例如。使用Gson,序列化,写自己的持久化接口,手动实现,使用Annotations标记和解析类...

标签: java json serialization configuration persistence


【解决方案1】:

我会推荐XStream。在没有任何配置的情况下,它具有与java.io.*ObjectStream 类似的功能,但输出的是 XML 而不是二进制 blob。您只想为类名添加几个别名以使文件更具可读性。

【讨论】:

    【解决方案2】:

    我建议指定 XSD 并使用 JAXB 生成 Java 类以及编组和解组基于 XML 的设置文件。

    确保根标记包含 XSD 的版本。如果需要支持多个版本,可以先使用 StAX 读取版本并确定 JAXB 类的正确版本。

    【讨论】:

      【解决方案3】:

      关于我现在如何解决这个问题的更多信息:

      我使用 Gson 将对象层次结构序列化为 JSON。向其中添加了一个通用类型适配器,用于序列化和反序列化所有已知接口。该适配器将类名保存到 JSON 对象中,并在反序列化时构造该类。除了为每个使用的接口注册这个 TypeAdapter 之外,不需要额外的配置。

      为了使其可靠,我将在项目中添加一个单元测试,以反序列化完整的可能配置。因此,对代码的任何更改都会破坏测试。

      通过这种方式,我可以满足上面提到的所有要点。

      我希望这对任何人都有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-10
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多