MVC和MVVM架构的区别

MVC和MVVM都是前端开发中常用的设计模式,都是为了解决前端开发中的复杂性而设计的,而MVVM模式则是一种基于MVC模式的新模式。

MVC(Model-View-Controller)的三个核心部分:模型、视图、控制器相较于MVVM(Model-View-ViewModel)的三个核心部分:模型、视图、视图模型的区别主要在于控制器和视图模型的区别,模型、视图几乎无差别。

在MVC模式中,视图与模型是通过控制器进行交互的,而在MVVM模式中,视图与视图模型之间是通过双向数据绑定进行交互的。拿flutter举个例子,MVC中View需要知道如何通过Controller来更新Model,并且必须手动调用setState()来刷新界面,MVVM通过数据绑定机制(如Provider),ViewModel的变化会自动反映到View上,减少了View对其他组件的直接依赖,实现了更加松散的耦合。

流程对比

MVC的流程

  • 用户交互:用户与View进行交互(如点击按钮)。

  • 调用Controller:View接收到用户的输入后,会直接调用相应的Controller方法。

  • 处理逻辑:Controller接收请求后,可能会操作Model(如更新数据),然后决定需要显示的数据。

  • 更新View:Controller可能通过返回值或直接调用View的方法通知View更新自身显示的内容。在某些实现中,View可能需要主动查询Model或Controller获取最新的数据状态。

  • 手动刷新UI:为了使UI反映出这些变化,通常需要在View中调用setState()(在Flutter中)或其他类似的方法来触发视图重绘。

MVVM的流程

  • 用户交互:用户与View交互(如点击按钮)。
  • 调用ViewModel方法:用户操作导致View调用ViewModel中的方法(例如,增加计数器的值)。
  • 处理逻辑并通知:ViewModel执行业务逻辑,并在数据发生变化时调用notifyListeners()(或类似的机制)。这一步骤不需要直接与View交互,它只是简单地通知其状态发生了变化。
  • 自动更新View:由于使用了数据绑定,当ViewModel的状态改变时,所有监听该状态的View都会自动更新,无需额外的手动干预。这意味着一旦ViewModel中的数据发生变化,界面就会自动反映这些变化,而不需要显式地调用setState()。

尽管两者都需要实例化Controller或ViewModel,但它们在流程和交互方式上有着本质的区别:

  • MVC更侧重于通过控制器作为中介来协调模型和视图之间的交互,要求视图主动查询或等待控制器的通知来进行更新。
  • MVVM利用数据绑定机制,使得视图能够自动响应ViewModel的变化,降低了视图与逻辑层之间的耦合度,简化了状态管理,提高了代码的可维护性和测试性。

总结:个人觉得就是数据绑定的区别,还有就是MVC中Controller充当中介让M和V通信,MVVM中相当于把双方的都拿来只让M或V与VM交互,不让M、V直接交互(MVVVM模式有着严格的规定,即View层与Model层不得直接进行通信)。

相关推荐
zzb15804 天前
ios基础-MVC-UIView
ios·mvc·cocoa
秋雨梧桐叶落莳6 天前
iOS——QQ音乐仿写项目总结
学习·macos·ui·ios·mvc·objective-c·xcode
mikasa6677 天前
关于Spring MVC 基于 AOP 实现的全局控制器统一处理方案@ControllerAdvice
java·spring·mvc
仍然.7 天前
Spring MVC(2)--- 介绍响应数据,具体案例和三层架构
mvc
仍然.8 天前
Spring MVC(1)---介绍Spring MVC 和 请求数据
java·spring·mvc
摇滚侠10 天前
Spring MVC 不是一个单独的框架,是 Spring 框架的一个模块
java·spring·mvc
我登哥MVP11 天前
Spring Boot 从“会用”到“精通”:SpringBoot MVC 请求处理全流程
java·spring boot·后端·spring·mvc·maven·intellij-idea
摇滚侠13 天前
JavaWeb 全套教程 MVC 模式 93
mvc
代码的小搬运工13 天前
【iOS】MVC架构
ios·架构·mvc
qq_25183645715 天前
基于MVC的学校食堂点餐管理系统的设计与实现
mvc