zoukankan      html  css  js  c++  java
  • iOS项目架构 小谈

    层级结构,自底向上

    持久层(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/
  • 相关阅读:
    Input 银行卡验证
    记一次坑爹的加解密问题
    C# Html Agility Pack
    记一次坑爹的 “跨域” 问题
    FindControl的使用方法
    C#如何使用异步编程
    ReportViewer中设置ServerReport.ReportServerCredentials属性的方法
    C#中常用接口介绍
    谈谈C#中的接口
    DataTable与Linq相互转换
  • 原文地址:https://www.cnblogs.com/Jenaral/p/5616145.html
Copyright © 2011-2022 走看看