MVC设计模式

2023-05-16

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

MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

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

ModelViewControllerDiagramZh.png

。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型
   模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusionComponents这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器
  控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。


优点:

在最初的JSP网页中,像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心地计划和不断的尝试。MVC从根本上强制性地将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它带给我们的好处是毋庸置疑的。

首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。

其次,控制器是自包含(self-contained)指高独立内聚的对象,与模型和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。例如,把数据库从MySQL移植到Oracle,或者把RDBMS数据源改变成LDAP数据源,只需改变控制器即可。一旦正确地实现了控制器,不管数据来自数据库还是LDAP服务器,视图都会正确地显示它们。由于MVC模式的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的少互扰性的构件。

此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的的视图将处理结果显示给用户。

MVC的优点
1.低耦合性

   视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码 ,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.高重用性和可适用性
  随着技术的不断进步,现在需要用越来越多的方式来访问应用程序。MVC模式允许你使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.较低的生命周期成本
  MVC使开发和维护用户接口的技术含量降低。
4.快速的部署
  使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
5.可维护性
  分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
6.有利于软件工程化管理
  由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。

参考:http://zh.wikipedia.org/wiki/MVC

http://blog.csdn.net/dqjyong/article/details/7697558

http://blog.csdn.net/bluishglc/article/details/6690693

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC设计模式 的相关文章

  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 小谈设计模式(1)—总序

    小谈设计模式 1 总序 专栏地址 开始操作 设计模式总论 设计模式是什么 组成要素 模式名称 问题描述 解决方案 效果描述 设计模式有什么作用 提供可重用的解决方案 提高代码的可读性和可维护性 促进代码的可扩展性 提高代码的灵活性和可重用性
  • 设计模式--组合模式

    组合模式 又叫部分整体模式 属于结构型模式 基本原理 以树形的结构将相似的对象组合起来 主要流程 1 创建对象 2 在对象中设置用来存放下一级相似对象的数据结构 3 在对象中设置增删改查等功能 注意 这种模式和数据结构中的树形结构相似 in
  • 基于SpringBoot的图书管理系统

    基于SpringBoot的图书管理系统 里面整合了比较全的内容 可以说是麻雀虽小五脏俱全 如果看懂了所有的内容可以说是已经非常精通SpringBoot了 一 引言 由于近期看了SpringBoot 一站式开发特别方便 情不自禁用Spring
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • Java 多线程模式 —— Guarded Suspension 模式

    Part1Guarded Suspension 模式的介绍 我们只从字面上看 Guarded Suspension 是受保护暂停的意思 1Guarded Suspension 模式 在实际的并发编程中 Guarded Suspension
  • 【QT学习】实现MVC框架的简易封装(一文读懂)

    文章目录 前言 一 MVC框架简介 1 核心部件 2 使用目的 3 MVC优点 二 具体封装步骤 1 文件管理 2 创建模型 3 创建控制器 4 MVC实现 用户登录验证为例 总结 前言 MVC Model View Controller
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • 单例模式的八种写法比较

    单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧 简介 单例模式是一种常
  • Spring MVC下篇

    书接上回Spring MVC上篇 前面介绍了Spring MVC的服务器如何获得用户的请求 那么今天就来介绍一下服务器如何将响应返回给客户端 目录 3 服务器将结果返回给用户 前端 3 1 返回一个静态页面 3 2 返回 text html
  • html理解MVC模型与MVVM模型底层实现

    一 MVC模型的底层实现 1 1 相关代码 div div
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • JavaScript设计模式-02-单例模式

    Javascript 设计模式 02 单例模式 简介 单例就是保证一个类只有一个实例 实现的方法一般是先判断实例是否存在 如果存在直接返回 如果不存在就创建了再返回 确保了一个类只有一个实例对象 在JavaScript里 单例作为一个命名空
  • 扩展Spring MVC框架的消息转换器

    扩展Spring MVC框架的消息转换器 param Override protected void extendMessageConverters List
  • Java监听器与观察者模式

    Java监听器与观察者模式 Java中的监听器 Listener 和观察者模式 Observer Pattern 都是用于处理对象间的事件通知和响应的设计模式 它们的目的是在对象之间建立一种松散的耦合 使得一个对象的状态变化可以通知到其他对
  • 设计模式(3)--对象结构(5)--外观

    1 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口 这个接口使得 这一子系统更加容易使用 2 两种角色 子系统 Subsystem 外观 Facade 3 优点 3 1 对客户屏蔽了子系统组件 减少了客户处
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)

    在ASP NET MVC中使用JQuery提供的弹出窗口 模态窗口 原理 使用 div 图层灵活显示在浏览器的任何位置 默认情况下指定 div 不可见 引用 样式表 在JQuery的官方网站可以下载对应的css样式表 打开官网的 样例页 找

随机推荐

  • symbol lookup error: undefined symbol: _ZN3tbb8internal13numa_topology4fillEPi 解决方法

    使用 运行C 43 43 程序 xff1a pedestrian tracker demo 输出报错 xff1a undefined symbol ZN3tbb8internal13numa topology4fillEPi samples
  • 软件工程学习笔记选择题总结

    第一章 初认软件工程 1 下面的 xff08 C xff09 说法是正确的 A 由于软件是产品 xff0c 因此可以应用其他工程制品所用的技术进行生产 B 购买大多数计算机系统所需的硬件比软件更昂贵 C 大多数软件系统是不容易修改的 xff
  • postman简介与安装步骤

    postman简介与安装步骤 1 postman简介 xff1a 2 postman安装步骤2 1 下载postman2 2 安装postman 3 案例3 1 案例一3 2 案例二案例三 1 postman简介 xff1a Postman
  • 1.4常用Linux命令-进程控制类命令

    程序是一个包含可执行代码的文件 xff0c 它放在磁盘等介质上 当程序被操作系统调用到内存并分配给它一定的资源后 xff0c 此时可称为进程 程序是静态概念 xff0c 进程是动态概念 Linux的进程状态如下图 ps功能描述ps命令是用来
  • 到底是选择嵌入式行业还是互联网行业

    不管是在狄泰圈子还是知乎上面 xff0c 关于到底选择嵌入式行业还是互联网行业这类问题 xff0c 是经常拿来讨论的 差不多像女孩子的月假一样 xff0c 每月必有 今天我就发表一下自己的看法 xff0c 希望对有同样问题的小伙伴有所帮助
  • 用CSS怎样实现鼠标移上去背景颜色变色 onmouseover、onmouseout

    lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta http equiv 61 34 Content Type 34 content 61 34 text ht
  • 软件质量模型--8大特性(学习笔记)

    目录 一 软件质量模型 二 8个特性及其子特性 一 软件质量模型 软件质量模型将系统 软件产品属性划分为8个特性 xff1a 功能性 性能效率 兼容性 易用性 可靠性 信息安全性 维护性和可移植性 与以往的软件质量六大属性 xff0c 区分
  • 【 Caffe C++】ubuntu下创建hdf5数据源解决多标签问题

    如何在ubuntu下为caffe创建HDF5数据源 xff1f hdf5数据源示例 layer span class token punctuation span name span class token operator span sp
  • MarkDownPad2 正版破解与汉化

    用MarkdownPad2写东西看起来比较高大上 就是专业版的竟然要15美刀 所以今天分享个能用的注册码 让大家都能用免费的专业版 首先去官网下载官方版本的Markdown 因为是外国网站所以可能有点慢 我下载时就是这样 所以我传了个官方的
  • VNC连接不上?too many authentication failures

    VNC连接不上 xff1f too many authentication failures 文章目录 VNC连接不上 xff1f too many authentication failures一 VNC连接不上阿里云服务器 一 VNC连
  • 临时抱佛脚真的有用吗?

    对于面试 应该有相应的准备 xff0c 对面试公司的背景要有简单的了解 xff0c 对企业文化要有简单的认识 那么最关键的就属于问答环节 你问我答 对于这方面 xff0c 有人喜欢临时抱佛脚 但后来 xff0c 我深刻的认识到 xff0c
  • C语言| char[ ]的输出 和结束符 ‘\0‘

    输出char arr 逐个字符输入输出 c 整个字符串一次输入输出 s printf 34 61 61 61 61 61 61 start 61 61 61 61 61 61 n n 34 char arr 61 39 1 39 39 2
  • python中的isdigit()函数

    s为字符串 s isalnum 所有字符都是数字或者字母 s isalpha 所有字符都是字母 s isdigit 所有字符都是数字 s islower 所有字符都是小写 s isupper 所有字符都是大写 s istitle 所有单词都
  • 【WiFi模块ASP-ESP8266】理论讲解与串口助手验证(超详解)

    大家好 xff0c 我是小政 xff0c 一名自动化专业的在校学生 最近在学习利用opencv进行环境监测 xff0c 需要将获取到的数据通过通信协议传输给stm32 我选择使用wifi模块进行无线通信 xff0c 接下来我会将我从入门到掌
  • 【平衡小车制作】(二)电机驱动(超详解)

    大家好 xff0c 我是小政 本篇文章我将针对平衡小车中的电机控制进行详细的讲解 xff0c 驱动一个电机最重要的就是给它一个PWM信号 xff0c PWM的概念 如何驱动电机及通过改变PWM占空比进行电机调速我会在本篇文章中进行详解 让每
  • 【平衡小车制作】(五)位置式PID、直立环与速度环概念(超详解)

    大家好 xff0c 我是小政 本篇文章我将针对位置式PID算法 直立环 速度环等概念进行详细的讲解 xff0c 让每位小伙伴能够对这三个概念有更加清晰的理解 一 PID控制算法 PID控制 xff0c 即为对偏差进行比例 积分和微分控制 由
  • 【平衡小车制作】(七)串级PID调参及平衡成果展示(超详解)

    大家好 xff0c 我是小政 本篇文章我将针对PID调参进行详细的讲解 xff0c 让每位小伙伴能够对比例 积分 微分三个参数如何调节有更加清晰的理解 一 调参步骤 确立机械中值直立环 xff08 内环 xff09 Kp极性 Kp大小 Kd
  • 第七章:总线

    7 1总线概述 总线概述 总线是一组能为多个部件分时共享的公共信息传送线路 共享是指总线上可以挂接多个部件 xff0c 各个部件之间相互交换的信息都可以通过这组公共线路传送 xff1b 分时是指同一时刻总线上只能传送一个部件发送的信息 总线
  • Jetson 系统监视程序Jtop及Jetson基本信息查询

    开启后的界面如下 xff1a 安装Jetson的监视程序 xff1a 了解安装的Jetpack版本是多少 xff1f 了解 GPU 的使用率 xff1f 了解Jetson机器工作在什么模式下 xff1f 了解CPU用了几个 xff1f 散热
  • MVC设计模式

    MVC模式 xff08 Model View Controller xff09 是软件工程中的一种软件架构模式 xff0c 把软件系统分为三个基本部分 xff1a 模型 xff08 Model xff09 视图 xff08 View xff