MV-X
这里面的X可以是:
�C(控制器)
P(展示器)
VM(视图模型)
这三个是Model和View之间的胶水或者中间人。一般来说,当用户对View有操作时他负责去修改相应Model,当model值发生变化时他负责去更新对应View。
Models(模型)-数据层,或者负责数据处理的数据接口层。比如Person和PersonDataProvider类。
Views(视图)-展示层(GUI),对于iOS来说所有以UI开头的类基本都属于这层。
View和Model是相互独立的,他们之间就是通过Controller来相互联系。有点闹心的是Controller是重用性最差的,所以我们需要为MVC瘦身。
MVP-
MVP和MVC很像双胞胎兄弟,不同在于View和Model之间切断了通信关系,严格的按照View->Presenter->Model的顺序执行,MVP中的协调器Presenter并没有对ViewController的生命周期做任何改变,如果要进行测试我们只要模拟Presenter的数据给View即可。Presenter中没有UI布局中相关的代码,只负责更新View的数据和状态,以及Model间的通信。
MVVM
MVVM将MVP中的P改成VM,基本上与MVP的模式完全一样,唯一的区别是它采取双向绑定(data-bingding),View的变动自动反应在ViewModel上,ViewModel的变动也反映在View上。
MVVM的优点和缺点:
1.数据绑定使得Bug很难被调试。你看到界面异常了,有可能是你View的代码有Bug,也有可能是Model的代码有问题。数据绑定使得一个位置的Bug被快速传递到其他位置,要定位原始出问题的地方就不那么容易了。
2.对于过大的项目,数据绑定需要花费更大的内存。从某种意义上来讲,数据绑定就使得MVVM变得很复杂难用。但是这个缺点也被很多人认为是优点。