【发布时间】:2013-11-06 11:58:01
【问题描述】:
总的来说,我仍在研究 RAC 和 FRP - 目前正在努力弄清楚如何实现我通常不得不在其他地方使用的模式。
假设我正在制作一个抽认卡应用程序,主屏幕是我的卡片组列表。这个应用程序使用网络服务器的状态作为事实来源。我不想在每次显示屏幕时都从服务器重新获取此卡组列表 - 太好了,我可以在带有重播主题的多播信号中使用延迟网络请求来有效地记忆该列表。
我有两种方法可以通过从服务器重新获取来刷新此列表,这对我来说很复杂。当应用程序中发生任何数量的事情时,我希望能够使这个“缓存”列表无效(例如,用户导航到其他屏幕并执行会使主屏幕上的牌组列表过时的操作,或者应用程序刚刚被重新唤醒,所以我们可以猜测它可能已经过时了),这样当用户下次返回这个主屏幕时,它一开始不会显示任何东西(而不是显示旧列表,因为它知道它是由于用户的操作而过期)并将重新获取列表,并在下载后显示它。我怎样才能最优雅地处理这种“无效”状态(希望没有实际状态)?
我还希望能够在超时时使“缓存”列表过期 - 基本上,甲板列表信号会给出缓存列表,直到足够的时间过去,此时它会在提供之前懒惰地发出网络请求数据。
我对如何实现这两件事有一些想法,但它们似乎有点令人费解。很想得到一些指导或被指出一些示例项目的方向。
我可以看到处理此问题的一种简单方法是拥有一个命令式服务层,命令式处理缓存和缓存失效,并使用广播事件使缓存失效,并从缓存返回或产生网络请求以填充反应层尝试访问数据时的缓存。如果不先了解这样做的反应方式,我宁愿不遵从这种方法。
谢谢!
【问题讨论】:
-
我喜欢@kastiglione 在该线程中发布的答案。
标签: objective-c design-patterns caching frp reactive-cocoa