MVVM、MVC、MVP的区别
MVVM、MVC和MVP是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
在单页面应用时,往往一个路由页面对应了一个脚本文件,所有的页面逻辑都在一个脚本文件里。页面的渲染,数据的获取,对用户事件的响应所有的应用逻辑都混合在一起,这样在开发复杂项目时,整个文件就会变得冗长,混乱,这样对项目开发和后期的项目维护是非常不利的。
MVC
MVC通过分离model,view和controller的方式来组织代码结构。其中view负责页面的显示逻辑,model负责存储页面的业务逻辑以及响应数据的操作,并且view和model应用了观察者模式,当model层发生改变的时候它会通知有关view层更新页面,controller层是view层和model层的纽带,它主要负责用户与应用的响应操作,当用户与页面产生交互时,controller的事件触发器就开始工作了,通过调用model层,来完成对model的修改,然后model层再去通知view层进行更新。
MVVM
MVVM分为model,view,viewmodel
- model代表数据模型。数据和业务逻辑都在model层中定义
- view代表UI视图,负责数据的展示
- viewmodel负责监听model中数据的改变并且控制视图的更新,处理用户交互操作
model和view并无直接关联,而是通过viewmodel来进行联系的,model和viewmodel之间有着双向数据绑定的联系。因此当model中的数据改变时会触发view层的刷新,view中由于用户交互操作而改变的数据也会在model中同步。
这种模式实现了model和view的数据自动同步,因此开发者只需要专注于数据的维护操作即可,而不是要自己操作dom。
MVP
MVP模式与MVC模式唯一不同在于Presenter和Controller。在MVC模式中使用观察者模式,来实现当model层数据发生变化时,通知view层的更新。这样view层和model层耦合在一起,当项目逻辑变得更复杂时,可能造成代码的混乱,并且可能会对代码的复用性造成一些问题。MVP的模式通过使用Presenter来实现对view层和model层的解耦。MVC中的controller只知道model的接口,因此它没有办法控制view层的更新,MVP模式中,view层的接口暴露给了presenter。因此,可以在presenter中将model的变化和view的变化绑定在一起,以此来实现view和model的同步更新,这样就实现了对view和model的解耦。