objc中国-学习笔记1-更轻量的 View Controllers

objc中国-学习笔记1-更轻量的 View Controllers

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分离出来,也没有对缓存进行控制,只是简单的封装了一下网络请求,但我想原文的意思大概如此,如图:

.
Alt text

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 回调。这其实是一个复杂的主题,我们可能在未来用一个完整的话题来讨论这个主题。

宗旨:写可维护的代码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值