首先这三者都是软件架构模式,他们的设计目标都是为了解决Model和View耦合的问题。
MVC
MVC最早是出现在后端的,因为在Web1.0时代并没有前端的概念,整个系统的架构大概就是服务端应用程序加上横跨客户端和服务端的JSP,JSP中又包含了HTML和CSS和JS。这种架构很明显的缺点就是JSP很难维护,而且服务端十分臃肿。
所以MVC框架应运而生,最主要的目的就是把数据、视图和业务逻辑控制进行分层。
- 仅限于后端的MVC
这里的MVC和前端关系几乎没有,进行的是服务端渲染,所有的页面由服务端生成后给前端返回一个HMTL文件。 - 前后端分离(得益于让Web进入2.0时代的AJAX)
- 前端的MVC
单纯的前后端分离项目仍然会带来代码难以维护的问题,前端同样需要合适的软件架构。
MVP
MVP和MVC相似,Presenter可以理解成一个中间人,它负责View和Model之间的数据流动,防止View和Model的直接数据交流。但随着项目体积增大,Presenter的会变得越来越臃肿,带来代码难以维护的老问题。
MVVM
MVVM(Model-View-ViewModel)最早是AngularJS带来的,VUE也深受MVVM的影响。ViewModel可以理解为Presenter的进阶版。MVVM的核心思想就是解决在MVP架构中需要开发者自己编写Presenter的痛点,用户只需要关心Model如何改变即可,不用自己编写大量的DOM操作。
ViewModel通过一套数据响应式机制自动相应Model中的数据变化,同时ViewMode会实现一套更新策略自动将数据变化转化为视图更新(涉及到diff算法和VDOM)
关于VUE2的双向数据绑定,其核心是 Object.defineProperty()