使用SQLite缓存数据分析与实现

前言:如果你准备看这篇文章,并且在此之前并没有使用过SQLite,建议先看 SQLite数据库框架之FMDB ,其中有用到SQL语句,如果不会的可以先可以看 iOS数据库操作中的常见SQL语句 。

封装思想

在讲解SQLite之前,先聊聊封装思想。。写代码的都知道,面向对象三大思想(有些说四大,这个不是重点)之一的封装性,这里就举一个栗子来说明一下什么是封装。

比如控制器需要数据,控制器就跟模型说,我要数据,请给我数据。对于数据是怎么来的,控制器并不关心,控制器只关心模型有没有给他数据。

然后模型呢?控制器找模型要数据,模型也没有啊,所以模型去找数据访问层要数据,数据访问层的数据是怎么来的,模型也不关心,他关心的也只是有没有给他数据。

然后数据访问层呢?数据访问层自己也是没有数据的,他也得去找他的上一级要数据啊。

找谁要呢?这里就要分两种情况,第一种是本地有数据,他将本地数据直接返回给模型,模型再返回给我。第二种情况是本地没有数据,他就去网络请求类要,最终网络请求类才和后端交互,去后端请求数据,并将数据请求回来后保存到本地缓存,并返回给数据访问层,数据访问层再返回给模型,模型返回给控制器。

所以,这样就形成了一个数据请求数据响应的链条:

使用SQLite缓存数据分析与实现

上面栗子中提到了数据访问层(Data Access Layer),可能有些朋友对这个词比较陌生,你就当做是模型和数据之间的桥梁就行了。

需求分析

这里我以 六阿哥客户端 的(首页列表数据)为例,来一步步实现数据缓存

使用SQLite缓存数据分析与实现

需求:列表数据如果本地有缓存,就直接加载本地数据,如果没有才去请求网络。并且在下拉刷新的时候清除列表的缓存数据,并把新请求回来的数据缓存到本地。

这里涉及到数据处理的类有,网络工具类、数据访问层类、列表模型类、控制器。当然我们这里并不是直接使用SQLite类库来缓存数据,而是通过FMDB(对SQLite进行封装的第三方类库),你也可以通过系统的CoreData来缓存数据。不过,我个人更喜欢FMDB,直接通过SQL语言管理数据。

代码实现

在进行数据缓存前,我们最好先对FMDB进行一次封装,让我们用起来更方便。这里我创建一个工具类JFSQLiteManager,直接贴代码,如果不熟悉FMDB的,建议先看 SQLite数据库框架之FMDB 

控制器向模型请求数据:

模型向数据访问层请求数据:

数据访问层判断是去本地还是网络请求数据:

本地请求数据方法:

远程请求数据的方法:

本地缓存数据的方法:

下拉刷新的时候,需要清理当前分类的数据,这里也是调用模型的清理方法:

然后模型调用数据访问层的清理方法:

最终在数据访问层完成清理操作:

代码有些多,请把 六阿哥客户端 下载到本地,根据本文思路去理清比较好。只要理解了上面那张数据请求数据响应的流程,剩下的都是一些基本代码了。而关于缓存策略,缓存清除和缓存保存,则是按照自己的项目需求来针对性实现。

    A+
发布日期:2016年06月14日  所属分类:iOS
标签:
六阿哥

目前评论:1   其中:访客  1   博主  0

  1. avatar 小车 1
评论加载中...

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: