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/
时间: 2024-11-05 22:43:24

iOS项目架构 小谈的相关文章

IOS项目架构分享

1.项目分层:通过过往的一些项目经验,我们在IOS项目架构时候可以对项目进行如下图层: OpenSourceSDK,顾名思义,就是我们引入的一些第三方的开源工具,比如github上开源项目 MySDK 就是我们自己封装的一些SDK.可以在各个项目中能用的 需要重点介绍的就是我们的MVP结构,请接着往下看 -------------------------------------------------------------------------------------------------

iOS项目架构文档

设计的项目架构主要引用MVVM+MVC架构,并以功能模块分级.以下为目录结构. 初级目录: 我们只需要关注SGZH文件夹下的目录,其他为Xcode管理的目录.可以看到此目录为项目初级目录,我们开发过程只需对初级目录内的文件进行操作,其主要划分为3大块: AppDelegate: AppDelegate是程序入口,程序启动和显示逻辑都定义在内部,主要可以让开发人员快速找到代理文件并了解程序从启动到显示过程,也可以快速进行一些初始化测试. Resource: 此目录主要存放一些项目资源文件,如项目切

iOS应用架构浅谈

缘由 从事iOS工作一年多了,主要从事QQ钱包SDK开发和财付通app维护,随着对业务的慢慢熟悉,最近在思考这两款应用架构设计的思想,刚好昨天在微信里看了一篇iOS大牛对终端应用架构的分享,乘热打铁,下面浅谈下我对ios应用架构设计的理解,写的不好或不对的地方,欢迎大家拍砖,我们一起来探讨. 假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 不要急着给出你的答案,可以先在你的脑子里思考3分钟,再看下面我要讲的内容. 其实对于iOS客户端应用的架构来说,复杂度不亚于服

iOS项目架构

关于项目架构的问题,我想,作为已经具有两年开发经验的本人来说,还是有一些不大不小的问题,下面来总结一下这些问题. 目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化. AppDelegate 这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来. Models 这个目录下

iOS开发项目架构浅谈:MVC与MVVM

MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的最大的优点在于其概念简单,易于理解,几乎任何一个程序员都会有所了解,几乎每一所计算机院校都教过相关的知识.而在 iOS 客户端开发中,MVC 作为官方推荐的主流架构,不但 SDK 已经为我们实现好了 UIView.UIViewController 等相关的组件,更是有大量的文档和范例供我们参考学习,可以说是一种非常通用而成熟的架构设计.但 MVC 也有他的坏处.由于 MVC 的

iOS 应用架构浅谈

当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: 简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面. App确实就是主要做这些事情,但是支撑这些事情的基础,就是做架构要考虑的事情. 调用网络API 页面展示 数据的本地持久化 动态部署方案 上面这四大点,稍微细说一下就是: 如何让业务开发工程师方便安全地调用网络API?然后尽可能保证用户在各种网络环境下都能有良好的体验? 页面如何组织,才能尽可能降低业务方代码的

iOS项目开发小技巧 (三) --UITableView实现Cell左划删除等自定义功能

今天来介绍下iOS开发中UITableView的Cell左划实现微信中置顶,删除等功能.该功能在iOS8.0以前是需要很复杂的实现,不过github上应该有现成demo,不过今天介绍的是在iOS8.0以后苹果新推出的api,来实现Cell左划自定义控件. 1. 首先创建UITableView视图,实现其俩个代理,UITableViewDelegate和UITableViewDataSource,该处代码就不说了,主要是俩个回调方法 -(UITableViewCell *)tableView:(U

iOS项目开发小技巧(一)--如何自定义UIViewController的titile

项目开发中,我们会碰到自己定义title文字样式的需求,系统的apiself.title很难对其进行自定义,以前的api有个很复杂的字典属性可以对其进行修改,这里不对其进行解释,我们来看一个简单的修改其样式的方法 我们看自己的ViewController.m文件 - (void)viewDidLoad { [super viewDidLoad]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];

iOS内存管理小谈

内存管理管理的是哪的内存?其实我们要管理的就是堆区的内存空间和任何继承NSObject的对象 1.首先要明确的一点是内存总共分为五大区,分别是栈区,堆区,BSS段,数据区和代码区: 2.BSS段,数据区和代码区这三大区是随着程序的启动加载到内存空间的,我们熟知的全局变量就存储在这里,不过分为两种情况:如果是未初始化的全局变量,那么它存储在BSS段,如果是初始化的全局变量的话就存储在数据区:很多时候我们不推荐大家创建全局变量的原因就是因为如果一个程序启动的话,存储在这里的全局变量就会随着程序的启动