浅谈MVC,MVP,MVVM区别与联系

时间:2022-08-16 21:16:23

转载请标明出处:http://blog.csdn.net/donkor_/article/details/54970769
前言
开年来第一篇文章。首先,过年之后就是风风火火的金三银四跳槽季。按耐不住内心跳动的程序员已经开始寻找新的工作机会。在这里提前祝大家找到合适的工作岗位,满意的薪资报酬。通过最近在多个Android开发交流群中的聊天记录,可以看出软件架构模式在面试中一直备受关注。所以有了本文,而本文只对MVC,MVP,MVVM进行粗浅的学习讨论,方便之后面试的同学。

目的,优势,好处(可以扯淡的话):
根据项目的需求和方案,选择一个适合的软件架构,极大的减少了开发的成本,与维护的时间。架构清晰,并提升编程速度。更容易进行后续的测试以及定位问题。

模式介绍
MVC:Model-View-Controller
MVP:Model-View-Presenter
MVVM:Model-View-ViewModel

浅谈MVC,MVP,MVVM区别与联系

区别与联系
相同点:

  • Model:数据对象,同时,提供本应用外部对应用程序数据的操作的接口,也可能在数据变化时发出变更通知。Model不依赖于View的实现,只要外部程序调用Model的接口就能够实现对数据的增删改查。
  • View:UI层,提供对最终用户的交互操作功能,包括UI展现代码及一些相关的界面逻辑代码。

不同点:
三者的差异在于如何粘合View和Model,实现用户的交互操作以及变更通知

  • Controller接收View的操作事件,根据事件不同,或者调用Model的接口进行数据操作,或者进行View的跳转,从而也意味着一个Controller可以对应多个View。Controller对View的实现不太关心,只会被动地接收,Model的数据变更不通过Controller直接通知View,通常View采用观察者模式监听Model的变化。

  • Presenter与Controller一样,接收View的命令,对Model进行操作;与Controller不同的是Presenter会反作用于View,Model的变更通知首先被Presenter获得,然后Presenter再去更新View。一个Presenter只对应于一个View。根据Presenter和View对逻辑代码分担的程度不同,这种模式又有两种情况:Passive View和Supervisor Controller。

  • ViewModel,注意这里的“Model”指的是View的Model,跟MVVM中的一个Model不是一回事。所谓View的Model就是包含View的一些数据属性和操作的这么一个东东,这种模式的关键技术就是数据绑定(data binding),View的变化会直接影响ViewModel,ViewModel的变化或者内容也会直接体现在View上。这种模式实际上是框架替应用开发者做了一些工作,开发者只需要较少的代码就能实现比较复杂的交互。

参考资料:
https://www.tianmaying.com/tutorial/AndroidMVC