MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离 关注点的方式来组织代码结构,优化开发效率。
在开发单页面应用时,往往一个路由页面对应了一个脚本文件,所有 的页面逻辑都在一个脚本文件里。页面的渲染、数据的获取,对用户 事件的响应所有的应用逻辑都混合在一起,这样在开发简单项目时, 可能看不出什么问题,如果项目变得复杂,那么整个文件就会变得冗 长、混乱,这样对项目开发和后期的项目维护是非常不利的。
(1)MVC
MVC 通过分离 Model、View 和 Controller 的方式来组织代码结构。 其中 View 负责页面的显示逻辑,Model 负责存储页面的业务数据, 以及对相应数据的操作。并且 View 和 Model 应用了观察者模式, 当 Model 层发生改变的时候它会通知有关 View 层更新页面。
Controller 层是 View 层和 Model 层的纽带,它主要负责用户与应 用的响应操作,当用户与页面产生交互的时候,Controller 中的事 件触发器就开始工作了,通过调用 Model 层,来完成对 Model 的修 改,然后 Model 层再去通知 View 层更新。
(2)MVVM
MVVM 分为 Model、View、ViewModel:
Model 代表数据模型,数据和业务逻辑都在 Model 层中定义;
View 代表 UI 视图,负责数据的展示;
ViewModel 负责监听 Model 中数据的改变并且控制视图的更新,处理 用户交互操作;
Model 和 View 并无直接关联,而是通过 ViewModel 来进行联系的, Model 和 ViewModel 之间有着双向数据绑定的联系。因此当 Model 中 的数据改变时会触发 View 层的刷新,View 中由于用户交互操作而改 变的数据也会在 Model 中同步。
这种模式实现了 Model 和 View 的数据自动同步,因此开发者只需要 专注于数据的维护操作即可,而不需要自己操作 DOM。
(3)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 的解耦, Presenter 还包含了其他的响应逻辑。
注意:
1.Vue2和Vue3都是MVVM框架,它们使用模板语法将Model中的数据绑定到View中。Vue2和Vue3的主要区别在于Vue3使用了Composition API,它提供了一种更灵活的方式来组织应用程序的逻辑。
2.Angular和AngularJS都是MVVM框架,它们使用指令将Model中的数据绑定到View中。Angular是AngularJS的下一代版本,它提供了一些新功能,例如组件和模块。
3.React是一个JavaScript库,用于构建用户界面。React使用虚拟DOM来提高性能。React不是一个完整的MVVM框架,但可以使用Redux等库来实现MVVM模式。
4.Python Django 采用了 MTV(Model-Template-View)架构,它与 MVC 架构非常相似。
Model:Model 代表应用程序的数据。
Template:Template 代表应用程序的用户界面模板。
View:View 负责将 Model 中的数据渲染到 Template 中。
Django 与 MVC 的主要区别在于 Django 没有控制器。在 Django 中,视图负责处理用户输入并更新模型。这使得 Django 的架构更加简单。(Flask同理)