当前位置: 首页 > news >正文

一、什么是 mvvm? MVC、MVP、MVVM三种模式的区别与详解

简介

MVC、MVP、MVVM都是常见的软件架构模式。

MVC(Model-View-Controller)架构模式中,将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。Controller负责处理用户交互和调度业务逻辑,View负责显示数据,Model负责数据的存储和逻辑处理。

MVP(Model-View-Presenter)架构模式,类似于MVC,但将View和Model的交互逻辑抽象到了Presenter中。在MVP中,View负责展示数据和接收用户输入,Presenter负责处理用户输入并更新View和Model。

MVVM模式(Model-View-ViewModel)架构模式,是将View和ViewModel关联起来,通过双向数据绑定实现View和ViewModel的同步更新。View负责展示数据和用户交互,ViewModel负责处理数据和业务逻辑,Model负责存储数据。MVVM的优点是能够降低View和ViewModel之间的耦合,使得代码更加可维护和可测试。

MVC详解

MVC架构模式认为,软件架构应该由三部分组成,模型(Model)、视图(View)和控制器(Controller)。
组件:
1.Model(模型):负责数据的处理和业务逻辑。可以理解为数据库存储和业务层处理。

2.View(视图):负责展示数据给用户,并处理用户的输入。可以理解为用户可以看的到和操作的页面。

3.Controller(控制器):负责协调模型和视图之间的交互,处理用户的输入并更新模型和视图。

MVC模式的核心思想是将应用程序分为三个独立的部分,使得每个部分可以独立开发、测试和维护。

这3种组件通过交互来协作:View创建Controller后, Controller根据用户交互调用Model的相应服务,而Model会将自身的改变通知View,View则会读取Model的信息以更新自身。
在这里插入图片描述
MVC架构的优点在于模型和视图的分离,提高了代码的可维护性和可测试性,用Controller作为中介,实现了模型和视图之间的解耦。但缺点是视图和控制器之间的交互复杂,增加了开发的复杂度。

MVP详解

MVP模式类似MVC模式,它通过Presenter作为中介来协调Model和View之间的交互。实现视图和模型的解耦,视图通过接口与Presenter进行交互,Presenter将视图的事件传递给模型进行处理,并将处理结果返回给视图进行展示。
组件

1.Model(模型):负责数据的处理和业务逻辑。

2.View(视图):负责展示数据给用户,并处理用户的输入。

3.Presenter(Presenter):负责协调模型和视图之间的交互,处理用户的输入并更新模型和视图。
在这里插入图片描述
它的优点也是在于可以把视图和模型的解耦,方便进行单元测试,同时,Presenter作为中介,将视图和模型之间的交互逻辑集中处理,可以支持多个视图对应一个Presenter的情况,但缺点在于Presenter可能会变得臃肿,难以管理。视图和Presenter之间的交互仍然较为复杂。

到这里大家可能会问,那MVC和MVP的不同点在哪?
从架构图和组件直接的交换可以看出,不同点:

MVP模式:
1.View不直接与Model交互,而是通过与Presenter交互来与Model间接交互
2.Presenter与View的交互是通过接口来进行的,更有利于添加单元测试
3.通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑,业务相似的时候也可以多同个View共享一个Presenter。
MVC模式:
1.View可以与Model直接交互
2.Controller是基于行为的,并且可以被多个View共享
3.Controller可以负责决定显示哪个View

而它们的相同点有:
优点:
1.降低耦合度
2.模块职责划分明显
3.利于测试驱动开发
4.代码复用
5.隐藏数据
6.代码灵活性
缺点:
额外的代码复杂度及学习成本。

MVVM 详解

MVVM模式通过数据绑定机制将ViewModel中的数据直接绑定到视图上,实现了视图和数据的自动同步。Vue中就使用了这种模式进行数据的双向绑定。
组件

1.Model(模型):负责数据的处理和业务逻辑。

2.View(视图):负责展示数据给用户,并处理用户的输入。

3.ViewModel(视图模型):负责将模型中的数据转换为视图可以直接使用的形式,并监听视图的变化来更新模型的数据。
在这里插入图片描述
它的优点在于实现视图和模型的解耦,方便进行单元测试,同时数据绑定机制简化了视图和模型之间的交互逻辑,ViewModel可以通过命令模式实现对用户输入的响应。缺点在于,数据绑定可能导致性能问题,需要谨慎使用。

MVC、MVP、MVVM的比较

从应用场景方面看:

MVC通常用于Web应用程序、桌面应用程序等。

MVP通常用于桌面应用程序、移动应用程序等。

MVVM通常用于前端开发、移动应用程序等。

从应用的优劣上看:

MVC相对简单,适用于小型应用程序,但控制器可能变得臃肿。

MVP在MVC的基础上进一步解耦了视图和模型,但Presenter可能变得臃肿。

MVVM通过数据绑定机制简化了视图和模型之间的交互,但可能导致性能问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [数据集][目标检测]扳手检测数据集VOC+YOLO格式1042张1类别
  • 前同事2024年接私活已入百万,都是用这几个开源的SpringBoot项目
  • 封装了一个iOS评论弹窗
  • 使用js代码模拟React页面中input文本框输入
  • YOLOv8实例分割+双目相机实现物体尺寸测量
  • LSI-9361阵列卡笔记
  • 手机谷歌浏览器怎么用
  • C/C++ 多线程[1]---线程创建+线程释放+实例
  • redis的RDB快照详解
  • C学习(数据结构)-->二叉树
  • SpringBoot依赖之Spring Data Redis 实现地理坐标(Geospatial)
  • 响应式Web设计:纯HTML和CSS的实现技巧-1
  • Java 入门指南:注解(Annotation)
  • Linux系统下的容器安全:深入解析与最佳实践
  • 《AI办公类工具PPT系列之三——Gamma APP》
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 【css3】浏览器内核及其兼容性
  • angular2开源库收集
  • AWS实战 - 利用IAM对S3做访问控制
  • chrome扩展demo1-小时钟
  • HTTP请求重发
  • Java IO学习笔记一
  • Javascripit类型转换比较那点事儿,双等号(==)
  • PermissionScope Swift4 兼容问题
  • React Transition Group -- Transition 组件
  • Sass 快速入门教程
  • sessionStorage和localStorage
  • Shell编程
  • SpringBoot几种定时任务的实现方式
  • Vue 动态创建 component
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Web Storage相关
  • 百度小程序遇到的问题
  • 分享一份非常强势的Android面试题
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用权重正则化较少模型过拟合
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 正则表达式小结
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 2017年360最后一道编程题
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • (SERIES12)DM性能优化
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (三) diretfbrc详解
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)汇编语言——简单程序
  • (转)shell调试方法
  • (转)winform之ListView
  • .net core 6 集成和使用 mongodb
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 中的轻量级线程安全
  • .NET/C# 使用反射注册事件
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)