我的困境在于,我希望我的客户端(Android)应用程序能够通过各种方法进行序列化,例如HTTP/XML、本地数据库或本地文件系统。我最初采用了策略模式,但我觉得我的解决方案很糟糕。
首先,我是否应该在客户端重新实现所有Rails模型验证,因为我不知道将来是否会始终使用Rails?更大的问题是,目前我只能将扁平对象表示为键值对,而我的代码无法处理像真正的ORM那样的嵌套对象。
我相信Android开发人员经常处理这些问题,所以我很想听听其他人是如何应对这些问题的。
我不会将您的Android应用程序视为Ruby应用程序的扩展,而是作为API的使用者。如果您可以尝试将服务器应用程序公开为JSON(或其他格式,但JSON最轻巧),并从Android应用程序中使用这些API,则最有可能会遇到较少问题,因为JSON已经处于K/V格式。
我还没有将Android对象写入SQLite,但我已将它们编写为Parcelable对象并写入SharedPreferences。对于小型到中型的应用程序,这两种策略都足够。对于数据密集型应用程序,显然您将不得不更进一步使用SQLite。
这些方法有一些很棒的文章:Managing State。
关键在于以易于序列化的方式设计对象。这意味着没有循环引用或极其复杂的对象。这不应该是一个很大的问题,特别是如果您的数据已经是JSON格式。您只需扩展一些类并添加函数,返回Parcelable对象表示或字符串表示,以便保存您的对象。
我建议避免在Android中克隆你的服务器端对象和验证,因为这样需要修改两个源代码文件,如果你进行小的更改。服务器应该处理所有数据和验证,而你只需要从Android请求、缓存和发送数据。
我很想听听将对象写入SQLite是否存在任何挑战,但我想这不会比我上面概述的细节更困难。希望这能在某种程度上帮到你!
我认为你可能在为智能手机应用程序做过多的工作。我建议考虑使用RESTful风格的Web服务和JSON内容。
我在Android上还没有进行过太多的持久性存储,但我认为您需要使用SQLiteDatabase并创建自己的Cusor,以对对象进行序列化/反序列化,以便将其添加到数据库中。一个可能的解决方案是扩展SQLiteCursor
或AbstractCursor。
否则,我认为除了“硬核”Serializabled之外,可能没有其他解决方案(我怀疑这对手机来说可能太过分了,但我可能是错的)