代码之家  ›  专栏  ›  技术社区  ›  RoToRa

在不公开实现的情况下透明地存储类状态

  •  -2
  • RoToRa  · 技术社区  · 14 年前

    我有一个model(mvc)类,它的内部状态(基本上包含private int 字段)我想存储。

    这个程序目前在android上运行,所以我需要将 Bundle ,但稍后我将在桌面应用程序中使用相同的类,在该应用程序中,我将不得不以其他方式存储状态,因此无法引用 直接上我的课。

    所以我的问题是:在不公开类实现的情况下,存储(和检索)类状态的最佳方法是什么?

    我能想到的最好的办法就是 private 访问修饰符,使字段成为可访问的包,并在同一个包中创建读/写助手类,但这似乎是错误的。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Rob H    14 年前

    我不熟悉android上的持久性机制,但一般来说,最好将持久性逻辑(即存储对象状态的代码)与实际包含数据的域对象分开。这是JPA和Java中几乎所有的现代对象关系映射工具所采用的方法。所以是的,引用 Bundle 直接在您的域类中的对象听起来不是正确的策略,特别是如果您计划在非android环境中也使用相同的类。

    我的建议是将对象状态序列化为XML,它可以跨环境移植。有很多开源工具可以帮助您轻松完成这项工作,并且不需要在您的域类中使用任何特殊代码。我最熟悉的两个是 JiBX Castor . 我不知道这两种方法是否都适用于android,但即使android有自己的工具来将对象转换成xml,您仍然可以在桌面端使用jibx或castor,因为它们可以适应许多不同的xml格式。

    一旦数据是XML格式的,就可以在目标环境中使用任何最合适的方法来持久化它。在桌面应用程序中,这可能意味着文件在用户的主目录中。在android上,我想是捆绑包,但这不是我的专长。祝你好运!

        2
  •  0
  •   eMgz    14 年前

    也可以看看桥的样式: http://en.wikipedia.org/wiki/Bridge_pattern 正如rob所说,您需要将持久性与数据对象分离,这样您就可以统一处理数据,并使用桥来处理不同平台中的持久性。