iOS MVC MVP MVVM 模式简述
原创
©著作权归作者所有:来自51CTO博客作者kang_dong的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.MVC:Model-View-Controller
- MVC是通过controller的控制去操作model层的数据,并且返回给view层展示。
- MVC工作原理:用户触发事件 -- view层发送指令到controller层 -- controller通知model层更新数据 -- 数据更新完显示在view层上。
- 优点:通过controller控制全局,同时将view和model的变化分开,对复杂混乱的项目结构,有了明确的组织方式。
- 缺点:当业务逻辑增加时,大量的逻辑代码放进了controller,导致controller越发臃肿,后期维护成本随之提升;没有区分业务逻辑和业务展示,对单元测试不友好。
2.MVP:Model-View-Presenter
- MVP是MVC的演化,MVC中的model和view两层存在耦合,之间相互依赖过多,由于view可以和model直接通信,造成了view既依赖于controller又依赖于model的局面,controller同样依赖于view和model,耦合性过高。在这种情况下MVP应运而生。可以看出与MVC不同的是,view层和model层不再相互可知,完全的耦合,presenter充当了桥梁的作用,用于操作view层发出的事件传递到presenter层中,presenter层去操作model层,并将数据返回给view层。
- 优点:model和view分离,可以做到修改view而不影响model,解决了两者耦合问题;更加高效的使用model,view不依赖model,view能做到对业务的完全分离。
- 缺点:presenter中除了处理业务逻辑,还需处理view-model两层协议,同样会导致presenter层的代码臃肿。
3.MVVM:Model-View-ViewModel
- MVVM相对MVP来说将presenter层换成了viewmodel层,并且view层和viewmodel层是相互绑定的关系,也就是当viewmodel层更新时,view层会相应的变动UI。
- 优点:view可以独立于model进行变化和修改,一个viewmodel可以绑定在不同的view上,降低耦合,增加复用;不仅解决model和view耦合问题,同时解决了维护两者映射关系的大量繁杂代码和DOM操作代码,提高开发效率、可读性,并保持优越的性能表现。
- 缺点:不适用于简单的项目;大型的项目视图状态较多时构建和维护成本大。