透明地存储类状态而不暴露实现

时间:2010-05-06 09:52:55

标签: java android model-view-controller serialization

我有一个模型(MVC)类,其内部状态(基本上包含私有int字段)我想要存储。

该程序在Android上运行(现在)所以我需要将其存储在Bundle中,但稍后我会在桌面应用程序中使用同一个类,我将不得不存储该状态其他方式,所以我不能直接在我的班级中引用Bundle

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

我能想到删除private访问修饰符以使字段可以访问包并在同一个包中创建读/写辅助类,但这似乎有点错误。

2 个答案:

答案 0 :(得分:1)

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

我的建议是将对象状态序列化为XML,XML可跨环境移植。有许多开源工具可以帮助您轻松实现这一点,并且不需要在您的域类中使用任何特殊代码。我最熟悉的两个是JiBXCastor。我不知道是否可以在Android上运行,但即使Android有自己的工具来将对象转换为XML或从XML转换对象,您仍然可以在桌面端使用JiBX或Castor,因为它们可以适应许多不同的XML格式。

获得XML格式的数据后,您可以使用最适合目标环境的任何方法来保留它。在桌面应用程序上,这可能意味着用户主目录中的文件。在Android上,我想这将是捆绑,但这不是我的专业领域。祝你好运!

答案 1 :(得分:0)

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