前言
最近学习使用MVVM + RAC 模式开发项目,这里分享些心得。
1. RAC入门资料
- 这篇文章来自袁峥Seemygo之手,非常详细讲解了ReactiveCocoa框架,建议详读!
- 当然还有最快让你上手ReactiveCocoa之进阶篇
1.2 辅助资料
- RAC集合 RAC使用RACSequence,对数组以及字典进行快速遍历。
- RAC两个方法map和flattenMap区别
- 信号过滤的一些方法 像常用的take系列和skip系列方法。
- RACSignal+NSOperactions使用笔记
1.3 本人根据《最快让你上手ReactiveCocoa之基础篇》 写的一个Demo分享(让你从代码上更亲切的体会RAC)
- Alkayoun-ReactiveCocoa Demo是用pod集成ReactiveCocoa,本人体力劳动完全照搬文章的代码做的 =v=
2.进阶MVVM+RAC
2.1 简介
- MVVM是一个UI设计模式。它是MV模式集合中的一员。MV模式还包含MVC(Model View Controller)、MVP(Model View Presenter)等。这些模式的目的在于将UI逻辑与业务逻辑分离,以让程序更容易开发和测试。其中 ViewModel 的主要职责是处理业务逻辑并提供 View 所需的数据,这样 VC 就不用关心业务,自然也就瘦了下来。ViewModel 只关心业务数据不关心 View,所以不会与 View 产生耦合,也就更方便进行单元测试。
MVVM模式依赖于数据绑定,由于iOS没有数据绑定框架。但幸运的是ReactiveCocoa可以很方便的实现这个,所以ReactiveCocoa是实现MVVM的最佳方式。不通过ReactiveCocoa也可以实现MVVM一样可以实现,感兴趣的可以看这篇博客。
- 自我理解讲的就是苹果目前支持MVC模式,但是很多view层控件的delegate和dataSoutrce都是需要在ViewController里做方法的实现,导致V层和C层耦合较高,是C层代码臃肿。
- 由于苹果设计模式是MVC,所以想流畅的运用MVVM就需要RAC这个工具来解耦C层本来需要实现的方法。
2.2 直接上工程——来自BinBear的仿面包旅行,ReactiveCocoa+MVVM
3.最后给出自己仿仿面包旅行: 缩减版Demo
BinBear的工程结构非常紧凑,风格很棒。
但是对于我这样的入门级来说还是费了好一番功夫才拨云见雾看清结构和逻辑关系的。
这里提供一份自己对其项目结构的摘取。。。(思维导图画的的太大看不清,传git上看吧)自己仿制BinBear的工程做了个比较简单的,只实现了从AppDelegate ---> tabbar ---->navigation ---->home 的结构,略有缩减,删减了JSPatch,iCarousel,MJExtension用YYKit代替,希望大家看着能清晰些。
各位看官需要仔细梳理好项目内部继承关系和遵守协议方法,主要是Main里面的。其次,页面网络请求都是通过Main内ViewModel的requestCommand命令去找各个页面的ModelProtocolImpl的Signal来实现。
同时苹果对热更新应用的严打,所以jspatch也少用较好。。