知识小总结十一 (MVC&MVVM)☀️

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

自行阅读 http://www.cocoachina.com/ios/20150526/11930.html

推荐阅读更多精彩内容