【问题标题】:iOS Client: "Caching" Server-side data to persistent storageiOS 客户端:将服务器端数据“缓存”到持久存储
【发布时间】:2012-02-21 21:46:19
【问题描述】:

我正在构建一个 iOS 客户端应用程序来与现有的后端架构进行交互。为了减少延迟、API 调用和负载,最好在客户端“缓存”模型数据以加快索引速度,然后根据需要对客户端/服务器端进行相应的更新。

当前的理论堆栈如下所示:

Server Side >>>>>>>>>>>>>>>>> Client Side
-----------------------------------------
PHP >> JSON >> CORE DATA >> UIKit Objects

注意: 同样值得注意的是,iOS 客户端虽然在内部遵循 MVC,但本质上是更大的 MVC 客户端-服务器架构中的“视图”。因此,就像在用户操作后更新模型或在模型更改后更新视图一样,服务器需要与客户端更改同步,而客户端需要与服务器端更改同步。

一些背景:

A.许多不同的数据结构可能会通过管道,并且必须动态构建成UIViews。可能必须定义模式(除了记住可接受的对象结构是什么之外,我不确定是否有“最佳方式”来遵守JSON 模式客户端)。我已经意识到需要将与创建自定义视图(“视图”模型)相关的模型数据与将在这些视图中呈现的模型数据(“常规”模型)分开。

B.最终用户应该能够立即CRUD(创建、读取、更新、销毁)这些视图中呈现的大多数数据(但不能对视图本身进行 CRUD)。他们以后可能需要在 Web 界面或其他上下文中查看此内容。

C. RestKit 看起来是从 API 到 JSON 到 COREDATA 的一个很好的候选者。当需要将客户端模型副本推送到服务器时,我需要确定它是否在结构上支持回调。也许最好的方法是在客户端模型中记录发生更改并通知任何基于 RestKit 的 HTTP 管理器将其传递给服务器。

终极问题: 任何人都可以谈论这种架构的最佳实践、陷阱、技巧和框架吗? (特别是在性能和​​客户端和服务器之间的工作分配方面,但也非常感谢一般建议。)

【问题讨论】:

    标签: iphone ios json core-data architecture


    【解决方案1】:

    我已经完成了一些工作,希望我能提供一些见解。

    关于 A) 是的,如果您打算使用 CoreData(或 RestKit),您需要预先了解您的架构。除非您有一些通用对象类型,您只是在其中存储 JSON 字符串或其他东西,否则您将无法映射动态对象,但这听起来不像您正在尝试做的事情,因为您提到用户正在编辑这些对象。

    B)RestKit 将为您处理推送到服务器,但我想您仍然需要对此进行一些控制。我们总是先在本地保存,然后在成功保存时推送到服务器来处理它。这也使我们能够在没有网络的情况下工作。当服务器拒绝更新/创建/删除您的用户正在执行时,您只需要处理边缘情况。

    C) RestKit 可能会帮助您完成 80% 的工作,就像它为我们所做的那样。只需了解 REST 端点和对象映射,并抽象 HTTP 请求,就会有很大的帮助。就系统理解变化而言,我们在托管对象上保留了一个标志,说明该对象是否需要同步。我们可以根据这些标志获取并推送服务器。

    RestKit 的一个特点是您可以在 CoreData 模型中拥有其他属性,这些属性不一定是 JSON 模式的一部分,但您可能需要在您的应用程序中。例如,我已经提到了知道对象是否需要同步的标志。我们还保留了用于搜索的预先计算的字段和一些其他随机信息,用于确定推送到服务器的对象的顺序(依赖项)。

    希望这会有所帮助。如果您有更具体的问题,我可能会有更多答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-30
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2014-12-02
      • 1970-01-01
      • 2015-11-04
      相关资源
      最近更新 更多