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

前端三大MV*模式:MVC、mvvm、mvp模式介绍

  1. MVC(同步通信为主):Model、View、Controller

  2. MVP(异步通信为主):Model、View、Presenter

  3. MVVM(异步通信为主):Model、View、ViewModel

mvc模式介绍

MVC(Model–View–Controller)模式是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)视图(View)控制器(Controller)

  • Model(模型)表示应用程序核心(如数据库)。

  • View(视图)显示效果(HTML页面)。

  • Controller(控制器)处理输入(业务逻辑)。

(1)视图(View):负责界面的显示,以及与用户的交互功能,例如表单、网页等。

(2)控制器(Controller):可以理解为一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。即用来连接视图和模型。

实际开发中,通常用控制器对客户端的请求数据进行封装(如将form表单发来的若干个表单字段值,封装到一个实体对象中),然后调用某一个模型来处理此请求,最后再转发请求(或重定向)到视图(或另一个控制器)。

(3)模型(Model):模型持有所有的数据、状态和程序逻辑。模型接受视图数据的请求,并返回最终的处理结果。

MVC模式的流程:浏览器通过视图向控制器发出请求,控制器接收到请求之后通过选择模型进行处理,处理完请求以后再转发到视图,进行视图界面的渲染并做出最终响应

在MVC模式中,视图View可以用JSP/HTML/CSS实现,模型Model可以用JavaBean实现,而控制器Control就可以用Servlet来实现。

MVC模式的优点

 低耦合、重用性高、生命周期成本低、部署快、可维护性高、有利软件工程化管理

MVC模式的缺点

没有明确的定义、不适合小、中型应用程序、增加系统结构和实现的复杂性、视图对模型数据的低效率访问

MVVM模式的组成部分

  • 模型

  • 模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。

  • 视图

  • 就像在MVC和MVP模式中一样,视图是用户在屏幕上看到的结构、布局和外观(UI)。

  • 视图模型

  • 视图模型是暴露公共属性和命令的视图的抽象。MVVM没有MVC模式的控制器,也没有MVP模式的presenter,有的是一个绑定器。在视图模型中,绑定器在视图和数据绑定器之间进行通信。

  • 绑定器

  • 声明性数据和命令绑定隐含在MVVM模式中。在Microsoft解决方案堆中,绑定器是一种名为XAML的标记语言。绑定器使开发人员免于被迫编写样板式逻辑来同步视图模型和视图。在微软的堆之外实现时,声明性数据绑定技术的出现是实现该模式的一个关键因素。 [1]

MVVM优点

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。

4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

mvp模式介绍

MVP(Model-View-Presenter)

MVP定义了Presenter和View之间的接口,用户对View的操作都转移到了Presenter。比如这里可以让View暴露setter接口以便Presenter调用,待Presenter通知Model更新后,Presenter调用View提供的接口更新视图。

优点

1、模型与视图完全分离,我们可以修改视图而不影响模型

2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。

4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

缺点

由于对视图的渲染放在了Presenter中,所以视图和Presenter的交互会过于频繁。还有一点需要明白,如果Presenter过多地渲染了视图,往往会使得它与特定的视图的联系过于紧密。一旦视图需要变更,那么Presenter也需要变更了。比如说,原本用来呈现Html的Presenter现在也需要用于呈现pdf了,那么视图很有可能也需要变更。


http://www.kler.cn/a/160095.html

相关文章:

  • git命令提交项目
  • 大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手
  • nacos配置中心入门
  • IOT物联网低代码可视化大屏解决方案汇总
  • stream学习
  • conda创建 、查看、 激活、删除 python 虚拟环境
  • 数据库的设计规范
  • Element-UI 动态控制输入组件类型,定义代码组件、前端模板
  • 02数仓平台Zookeeper
  • prime靶机打靶记录
  • 数字化转型:利用软件电商平台与私有化软件提升竞争力
  • C++ 共享内存ShellCode跨进程传输
  • 54.多级缓存
  • 【PyTorch】数据集
  • 实战oj题——设计循环队列
  • 【Qt之QSqlRelationalTableModel】描述及使用
  • 【微信小程序】保存多张图片到本地相册 wx.saveImageToPhotosAlbum
  • 分支和循环
  • 目标检测——R-CNN算法解读
  • web理论测试
  • Insomnia -- 非常nice的开源 API 调试工具
  • Camunda 7.x 系列【57】流程设计器
  • Axios详解及运用案例
  • 详细学习PyQt5中的多线程
  • ubuntu下QT搭建Android开发环境
  • Linux C语言 42-进程间通信IPC之网络通信(套接字)