MVC模式简介

article/2025/9/12 21:46:50

MVC模式

  • 一.MVC是什么
    • 二.优缺点
      • 2.1 MVC模式的优点
        • 2.1.1 低耦合
        • 2.1.2 重用性高
        • 2.1.3 生命周期成本低
        • 2.1.4 部署快
        • 2.1.5 可维护性高
        • 2.1.6 有利软件工程化管理
      • 2.2 MVC模式的缺点
        • 2.2.1 没有明确的定义
        • 2.2.2 不适合小、中型应用程序
        • 2.2.3 增加系统结构和实现的复杂性
        • 2.2.4 视图对模型数据的低效率访问

一.MVC是什么

MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)
MVC 模式的目的是实现一种动态的程序设计,简化后续对程序的修改和扩展,并且使程序某一部分的重复利用成为可能。除此之外,MVC 模式通过对复杂度的简化,使程序的结构更加直观。软件系统在分离了自身的基本部分的同时,也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长进行相关的分组:

  • 模型(Model):程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能);
  • 控制器(Controller):负责转发请求,对请求进行处理;
  • 视图(View):界面设计人员进行图形界面设计。

MVC 模式的图形描述如下:
在这里插入图片描述
MVC模式中三个组件的详细介绍如下:

  • 模型(Model):用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“Model”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,由此,View 可以了解在数据 Model 上发生的改变。(比如:观察者模式(软件设计模式));
  • 视图(View):能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册;
  • 控制器(Controller):起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。

从MVC模式的一般理解来看,视图层与模型层是存在直接联系的,并且模型层的变化会通过视图层反映出来,这确实是MVC模式的标准理解,不过在我目前接触到的实际应用中,更多的情况时,视图层与模型层是通过控制层联系起来的,两者之间并无直接的联系,三者之间的关系更类似下图所示:
在这里插入图片描述
结合MVC模式的标准解释来看,上述模式可能是MVC模式的一种变型使用,这只是个人的武断猜测,并无实据,待以后对架构模式有深入了解后,可能就会有准确答案了(-)。

二.优缺点

2.1 MVC模式的优点

2.1.1 低耦合

通过将视图层和业务层分离,允许更改视图层代码而不必重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变,只需要改动MVC的模型层(及控制器)即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。

模型层是自包含的,并且与控制器和视图层相分离,所以很容易改变应用程序的数据层和业务规则。如果想把数据库从 MySQL 移植到 Oracle,或者改变基于 RDBMS 的数据源到 LDAP,只需改变模型层即可。一旦正确的实现了模型层,不管数据来自数据库或是 LDAP服务器,视图层都将会正确的显示它们。由于运用 MVC 的应用程序的三个部件是相互独立,改变其中一个部件并不会影响其它两个,所以依据这种设计思想能构造出良好的松耦合的构件。

2.1.2 重用性高

随着技术的不断进步,当前需要使用越来越多的方式来访问应用程序了。MVC模式允许使用各种不同样式的视图来访问同一个服务端的代码,这得益于多个视图(如WEB(HTTP)浏览器或者无线浏览器(WAP))能共享一个模型。

比如,用户可以通过电脑或通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式(流程)是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面(视图)使用。例如,很多数据可能用 HTML 来表示,但是也有可能用 WAP 来表示,而这些表示的变化所需要的是仅仅是改变视图层的实现方式,而控制层和模型层无需做任何改变。

由于已经将数据和业务规则从表示层分开,所以可以最大化的进行代码重用了。另外,模型层也有状态管理和数据持久性处理的功能,所以,基于会话的购物车和电子商务过程,也能被Flash网站或者无线联网的应用程序所重用。

2.1.3 生命周期成本低

MVC模式使开发和维护用户接口的技术含量降低。

2.1.4 部署快

使用MVC模式进行软件开发,使得软件开发时间得到相当大的缩减,它使后台程序员集中精力于业务逻辑,界面程序员集中精力于表现形式上。

2.1.5 可维护性高

分离视图层和业务逻辑层使得WEB应用更易于维护和修改。

2.1.6 有利软件工程化管理

由于不同的组件(层)各司其职,每一层不同的应用会具有某些相同的特征,这样就有利于通过工程化、工具化的方式管理程序代码。控制器同时还提供了一个好处,就是可以使用控制器来联接不同的模型和视图,来实现用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。

2.2 MVC模式的缺点

2.2.1 没有明确的定义

完全理解MVC模式并不是很容易。使用MVC模式需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考软件的架构。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。

2.2.2 不适合小、中型应用程序

花费大量时间将MVC模式应用到规模并不是很大的应用程序通常会得不偿失。

2.2.3 增加系统结构和实现的复杂性

对于简单的界面来说,非要严格遵循MVC模式,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

2.2.4 视图对模型数据的低效率访问

依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

说明:如果通过控制器访问模型层(而非视图层直接访问),则避免对未变化数据的不必要的频繁访问,从而解决此问题。


原文链接:https://blog.csdn.net/liitdar/article/details/86685880


http://chatgpt.dhexx.cn/article/7825VCvP.shtml

相关文章

MVC模式浅谈

一、MVC模式概述 模型-视图-控制器(MVC模式)是一种非常经典的软件架构模式,在UI框架和UI设计思路中扮演着非常重要的角色。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式在一种解决方案中结合起来&am…

​MVC​​模式简介

MVC模式简介 MVC简介 MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到…

MVC模式介绍

本文主要介绍 MVC 模式的相关知识。 1 What MVC(Model–View–Controller)模式是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器&a…

【js】addEventListener() 用法

addEventListener() 方法用于向指定元素添加事件句柄。 addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 你可以向一个元素添加多个事件句柄。 你可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。 你可以…

JS中addEventListener的用法

事件模型 这是一个完整的事件流: 事件捕获----处于目标----事件冒泡 注意:事件捕获由于浏览器兼容问题用的比较少 事件处理程序(addEventListener) 格式为:element.addEventListener(type, handle, false); type: 事…

JS addEventListener()方法

addEventListener(),事件监听,用于向指定的元素添加事件监听 语法:addEventListener(event,function,useCapture); 第一个参数event:指事件的类型(如’click’,‘mousedown’) 第二个参数function&#xf…

JS中addEventListener的使用

使用addEventListener绑定事件:MDN中addEventListener()说明 使用removeEventListener可以解绑事件: MDN中removeEventListener()说明 1,我们使用addEventListener的时候,主要用来实现事件的绑定监听的 存在三个参数 target.addE…

addEventListener()使用方法

document.addEventListener() 方法用于向文档添加事件句柄&#xff0c;即事件监听。先看下面代码&#xff0c;稍后进行讲解。 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title> </head> <body>&…

关于JS中addEventListener的使用

关于JS中addEventListener的使用 MDN中addEventListener()说明 使用removeEventListener可以解绑事件 MDN中removeEventListener()说明 主要用来实现事件的绑定 存在三个参数 target.addEventListener(type, listener, useCapture); type: 表示监听事件类型的字符串。类似于…

JavaScript属性及正则表达式

目录 offset、client、scroll属性offsetclientscroll 正则表达式什么是正则表达式正则表达式的特点正则表达式的创建正则表达式的检验正则表达式的修饰符模式修饰符边界符预定义符转义特殊字符字符类字符组合取反符量词符括号字符 正则表达式的优先级String类中的方法match方法…

前端js正则表达式

正则表达式 第一章 正则表达式字符匹配攻略 1.1. 两种模糊匹配 1.1.1. 横向模糊匹配 一个正则可匹配的字符串的长度不是固定的&#xff0c;可以是多种情况的。譬如 {m,n}&#xff0c;表示连续出现最少 m 次&#xff0c;最多 n 次。其实现的方式是使用量词。例如let reg /a…

JS正则表达式字符匹配

正则表达式字符匹配 这是阅读《JavaScript正则表达式迷你书》后整理的一些笔记。 正则表达式是匹配模式&#xff0c;要么匹配字符&#xff0c;要么匹配位置。 下面主要介绍匹配字符的情况&#xff0c;匹配位置的情况我也正在学习中。 两种模糊匹配&#xff1a; 1.横向模糊匹…

JS正则表达式

JS正则表达式 0.前言 首先是一些资料[在线测试网站](regex101: build, test, and debug regex)和简明易懂教程。 正则表达式是一组由字母和符号组成的特殊文本&#xff0c;它可以用来从文本中找出满足你想要的格式的句子。 一个正则表达式是一种从左到右匹配主体字符串的模式。…

Spring框架总结

简介 创立于 2003年 , 是为了解决企业级开发的复杂性的! 是一个分层的se/ee(javase和java ee)一站式轻量级开源框架 作用&#xff1a; 1.Spring是一个开元的轻量级的应用开发框架&#xff0c;其目的是用于简化企业级应用程序开发&#xff0c;减少侵入&#xff1b; 2.Spring的…

Spring框架特点

Spring是什么&#xff1f; spring是一个轻量级的 IOC&#xff08;控制反转&#xff09;和AOP(面向切面)的编程。 什么是IOC? IOC(控制反转) &#xff1a;传统JAVA SE 程序设计&#xff0c;我们直接在程序内部通过new来创建对象&#xff0c;是程序主动去创建依赖对象&#x…

Spring框架常用注解

Spring常用注解 Controller Controller 用来响应页面&#xff0c;表示当前的类为控制器。 在SpringMVC 中&#xff0c;控制器Controller 负责处理由DispatcherServlet 分发的请求&#xff0c;它把用户请求的数据经过业务处理层处理之后封装成一个Model &#xff0c;然后再把该…

浅谈我对spring框架的理解

总所周知&#xff0c;java界乃由五大传统框架&#xff1a;1.核心业务层框架&#xff08;地位不可动摇&#xff09;spring,2.控制层框架&#xff1a;spring MVC与struts2, 持久层框架&#xff1a;Mybatis&#xff0c;hibernate。 先从spring说起吧&#xff0c;了解过spring的同学…

Spring框架(一):spring框架的简介

一、spring框架的概念 Spring是一个开源轻量级的控制反转(IoC)和面向切面(AOP)的容器框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅限于服务…

关于对Spring框架的详解

Spring框架 基本概念Spring的形成主要模块三层架构Spring的优点对于Spring 框架中都用到设计模式&#xff1a; 基本概念 Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅仅限于服务…

【Spring框架】Spring框架介绍

文章目录 Spring框架介绍Spring两大核心技术 Spring的优点Spring体系介绍核心容器数据访问/集成Web页面其他模块 Spring框架介绍 Spring框架是分层的 Java SE/EE 应用 full-stack 全栈式轻量级开源框架&#xff0c;以 IOC(Inverse Of Control&#xff1a;控制反转)和 AOP(Aspe…