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层不得直接进行通信)。

相关推荐
xiaolyuh1231 天前
Spring MVC Bean 参数校验 @Validated
java·spring·mvc
heartbeat..3 天前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
自在极意功。3 天前
简单介绍SpringMVC
java·mvc·springmvc·三层架构
威桑3 天前
深入理解 MVC 模式的优缺点
系统架构·mvc
alonewolf_994 天前
Spring MVC启动与请求处理全流程解析:从DispatcherServlet到HandlerAdapter
java·spring·mvc
廋到被风吹走4 天前
【Spring】Spring MVC核心原理与RESTful最佳实践详解
spring·mvc·restful
alonewolf_995 天前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
撩得Android一次心动6 天前
Android 架构模式的演变(MVC、MVP、MVVM、MVI)
android·架构·mvc·mvvm·mvp
小信丶6 天前
Spring MVC 配置器:WebMvcConfigurer 详解、应用场景和示例代码
java·spring·mvc
柒.梧.7 天前
深度解析SpringMVC实战项目:从配置到请求处理全流程
java·spring·mvc