objc中国-学习笔记1-更轻量的 View Controllers
2015-03-26 09:39
260 查看
objc中国-学习笔记1-更轻量的 View Controllers
objc原文链接:http://objccn.io/issue-1-1/
.
objc原文链接:http://objccn.io/issue-1-1/
方法:
1.把 Data Source 和其他 Protocols 分离出来
详情见demo http://download.csdn.net/detail/baidu_22932825/8534365
2.将业务逻辑移到 Model 中
举例:比如服务器给我们传下来一个展示在tableView中item的完成时间,而我们在界面上是要已 星期几的形式来展示,这时候我们就应该在model中添加一个星期几的属性,然后直接在controller 里直接拉去这个属性,将时间转换为星期几的方法写在实体类的category中,当然这个距离不够恰当, 但是大概意思应该是如此,就是说我们Modal中的数据进行二次处理的方法不应该在controller中来 实现,而应该在更为合适的地方,让viewController简单的取到处理之后的结果
3.创建 Store 类
转自官方,我的开发历程中确实没有做过此类事情 ------------------------------------- 在我们第一版的示例程序的中,有些代码去加载文件并解析它。下面就是 view controller 中的代码: - (void)readArchive { NSBundle* bundle = [NSBundle bundleForClass:[self class]]; NSURL *archiveURL = [bundle URLForResource:@"photodata" withExtension:@"bin"]; NSAssert(archiveURL != nil, @"Unable to find archive in bundle."); NSData *data = [NSData dataWithContentsOfURL:archiveURL options:0 error:NULL]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; _users = [unarchiver decodeObjectOfClass:[NSArray class] forKey:@"users"]; _photos = [unarchiver decodeObjectOfClass:[NSArray class] forKey:@"photos"]; [unarchiver finishDecoding]; } 但是 view controller 没必要知道这些,所以我们创建了一个 Store 对象来做这些事。通过分离,我们就可以复用这些代码,单独测试他们,并且让 view controller 保持小巧。Store 对象会关心数据加载、缓存和设置数据栈。它也经常被称为服务层或者仓库。
4.把网络请求逻辑移到 Model 层
原文中如下: 和上面的主题相似:不要在 view controller 中做网络请求的逻辑。取而代之,你应该将它们封装到另一个类中。这样,你的 view controller 就可以在之后通过使用带有回调(比如一个 completion 的 block)来请求网络了。这样的好处是,缓存和错误控制也可以在这个类里面完成。 ------------------------------ 在开发中我并没有把对错误的控制从controller分离出来,也没有对缓存进行控制,只是简单的封装了一下网络请求,但我想原文的意思大概如此,如图:
.
5.把 View 代码移到 View 层
就是将view组合起来,然后写好接口,供controller使用。
6.通讯
原文如下: 其他在 view controllers 中经常发生的事是与其他 view controllers,model,和 views 之间进行通讯。这当然是 controller 应该做的,但我们还是希望以尽可能少的代码来完成它。 关于 view controllers 和 model 对象之间的消息传递,已经有很多阐述得很好的技术(比如 KVO 和 fetched results controllers)。但是 view controllers 之间的消息传递稍微就不是那么清晰了。 当一个 view controller 想把某个状态传递给多个其他 view controllers 时,就会出现这样的问题。较好的做法是把状态放到一个单独的对象里,然后把这个对象传递给其它 view controllers,它们观察和修改这个状态。这样的好处是消息传递都在一个地方(被观察的对象)进行,而且我们也不用纠结嵌套的 delegate 回调。这其实是一个复杂的主题,我们可能在未来用一个完整的话题来讨论这个主题。
宗旨:写可维护的代码。
相关文章推荐
- OBJ-C @property和@synthesize关键字学习笔记
- event.offsetX event.pageX event.clientX 和 obj.offsetLeft学习笔记
- objc_msgSend消息传递学习笔记 – 对象方法消息传递流程
- 《编程之美》学习笔记 1.2中国象棋将帅问题
- Three.js学习笔记——3dsmax 加载obj模型
- OBJ-C实例变量修饰符;私有变量;私有方法;description;多态;点语法学习笔记
- 中国剩余定理学习笔记
- 开源中国源码学习笔记
- OBJ-C类方法概述学习笔记
- opencv学习笔记2——surf算法demo中find_obj分析
- OBJ-C匿名对象和封装学习笔记
- 学习笔记——中国剩余定理(CRT)
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
- js的call(obj,arg)学习笔记
- C语言学习笔记——关于 .obj 文件的理解
- obj-c学习笔记
- iOS学习笔记16—@synthesize obj=_obj的意义详解 @property和@synthesize
- 学习笔记:中国剩余定理(CRT)及扩展中国剩余定理
- iOS学习笔记16—@synthesize obj=_obj的意义详解 @property和@synthesize
- OBJ-C动态类型&静态类型学习笔记