层级结构,自底向上

持久层(File,Realm,SQLite)<==>网络层(相信每个公司都有自己的网络层吧)==>业务层(ViewModel)==>展示层(View,VC)

持久层

耦合到网络层

设计要点

持久模型的选择,我这里选择了文件,直接缓存了JSON.txt。并且维护一张表映射到文件,实现快速获取,文件超时删除等操作。

持久层的timeout设置,网络层访问到这里的时候,如果超时立即抛弃缓存

网络层

耦合到持久层

设计要点

网络层的设计是基于离散式的,即一个API接口对于一个Class。实现接口复用,有了为同一个公司的多个APP提供APIKit的可能。

网络层的设计是基于数据流的。也就是说,你订阅了这个接口,以后这个接口出现刷新,加载数据等,所有的返回及时发送给所有订阅者。

一份请求数据,可以多处订阅。例如在首页加载了N个接口,在详情页获取其中某个接口的返回数据,这里你不需要知道那个接口是否加载完成,直接订阅即可。

接口实例是可reload,可refresh,可nexPage得,具体基于业务实现

是有缓存开关的

是可adaptation的。这里可要求过来接收数据的类型实现JSONConvertable协议

是可以统一catch一些errors的。

业务层

业务层耦合网络层

设计要点

这里的业务层就抽象成一个若干个ViewModel

ViewModel维护各种数据流,状态。部分数据是要提供给展示层的

展示层和业务层相互订阅。

展示层

展示层和业务层耦合

设计要点

View单纯的包含View。哈哈这里递归了。View也提供事件流,以供和业务层进行绑定。例如这里的view里有一个button,点击button提交数据。这个数据肯定在ViewModel里了。所有,view提供一个buttonClick的信号,ViewModel提供的UploadData的操作。两者绑定即可。

ViewController,主要在这里进行业务层ViewModel和视图View的绑定,解绑。

转载自: http://fengdeng.github.io/blog/2016/05/24/xiang-mu-jia-gou-xiao-jie-ios/

最新文章

  1. 详解java定时任务
  2. js的encodeURIComponent与java的URLEncoder的区别
  3. 动态加载(异步加载)jquery/MUI类库 页面加载完成后加载js类库
  4. UISrollView
  5. IOS网络第一天 - 02SDWebImage
  6. AD6电气规则错误报告中英文对照
  7. 39. 求分数序列前N项和
  8. 51nod1161 Partial Sums
  9. Unity3d 模型导入选项
  10. 【零基础学习iOS开发】【02-C语言】05-进制
  11. File类常用方法
  12. day5 range 用法示例
  13. HTTPS和SSL握手过程(转载)
  14. fastDFS 命令笔记
  15. scala中的isInstanceOf和asInstanceOf
  16. Python中使用SMTP发送邮件以及POP收取邮件
  17. CAD中的各种Polyline
  18. html+js自定义颜色选择器
  19. Java零基础教程(二)基础语法
  20. python 日期格式

热门文章

  1. osg蝴蝶纹理
  2. createThread和_beginthreadex区别
  3. webapi中的自定义路由约束
  4. 第三次冲刺spring会议(第六次会议)
  5. wpf ListBox 双击事件时在子项添加Style 确保选中
  6. onmousedown活用之鼠标拖动
  7. 模拟IIC协议时序
  8. 《Windows驱动开发技术详解》之派遣函数
  9. MFC模态和非模态对话框编程
  10. 如何更改mysql可执行路径及更改mysql数据库文件路径