MVC
是什么?
MVC是
Model-View-Controller
,就是模型-视图-控制器
模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。视图对象是应用程序中用户可以看见的对象,并能对用户的操作作出响应。视图对象的主要目的,就是显示来自应用程序模型对象的数据,并使该数据可被编辑。
控制器对象负责解释在视图对象中进行的用户操作,并将新的或更改过的数据传达给模型对象。模型对象更改时,一个控制器对象会将新的模型数据传达给视图对象,以便视图对象可以显示它。
有什么用?
在MVC模式中,三个层各司其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。
有利于组件的重用。
各层之间的通信
C⇒M C⇒V
- Controller可以直接与Model和View通信。
V ⇢C
- V不能直接与C通信,可以通过action...target(如UIButton的addTarget:action:forControlEvents:)和delegate(如UITableViewDelegate)的方式来与Controller通信。
M ⇢C
- M不能直接与C通信,可以通过Notification和KVO 的方式来与Controller通信
M V 不能互相通信
MVVM
MVC存在的问题
- MVC有一种调侃的说法叫
Massive View Controller
,一个巨大的vc一般少则上千行代码,多则上万行。一般臃肿的vc包括view的构建、网络数据的请求及后续处理、响应逻辑、数据源方法以及其它无关vc的代码,vc成了代码垃圾场,对其进行维护和测试非常困难。View和ViewController的紧密耦合。
是什么?
- MVVM是
Model View View-Model
,就是模型-视图-视图模型
Model层
- 和MVC中的M一样
View层
- view和view controller正式联系在一起,把它们视为一个组件。
View-Model层
- 对视图展示数据进行处理,一般流程是,接受vc的事件命令请求及处理相关数据,完事之后将标准展示数据处理好交给vc展示到view上
有什么用?
MVVM就是在MVC的基础上加入了一个视图模型viewModel,用于数据有效性的验证,视图的展示逻辑,网络数据请求及处理,其他的数据处理逻辑集合,并定下相关接口和协议。相比起MVC,MVVM中vc的职责和复杂度更小,对数据处理逻辑的测试更加方便,对bug的原因排查更加方便,代码可阅读性,重用性和可维护性更高。MVVM耦合性更低。MVVM不同层级的职责更加明确,更有利于代码的编写和团队的协作。
要对MVVM进行理解,最好通过阅读代码的方式。如https://github.com/lizelu/MVVM。如果要更深入的使用MVVM,可以学习ReactiveCocoa