什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录

  • 应用分层
  • 什么是MVC?
  • 什么是 SpringMVC?
  • 三层架构
  • 三层架构和MVC的关系

应用分层

在讲解什么是MVC之前,先来理解一下什么是应用分层。

应用分层是一种软件开发设计思想,将应用程序划分成N个层次,每个层次都分别负责自己的职责,多个层次之间来协同提供完整的功能,根据项目的复杂度,将项目分成三层或四层等。

举个例子:比如,一个公司创始初期,创始人要身兼数职,既要做财务,又要做人事,又要做行政,但随着公司的越来越大,就会划分成多个不同的部门。

为什么要进行应用分层???

在功能简单,代码量少是,我们通常不考虑分层,但是,随着业务越来越复杂,功能越来越强大,大量的代码都混在了一起,会出现逻辑不清晰,各模块相互依赖,代码扩展性差,改动一处牵动全身等问题,所以,就要对项目进行分层,MVC 和 三层架构 都是应用分层的充分体现,下面先看一下什么是MVC。

什么是MVC?

MVC(Model View Controller),它是一种思想,他把软件系统分为 以下三部分:

Model(模型):用来处理程序中数据逻辑的部分

View(视图):在应用程序中,专门和浏览器进行交互,展示数据的资源

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

举个例子:

1.比如进入京东的购物页面

在这里插入图片描述

2.搜索手机

在这里插入图片描述

以上的过程,当进入京东购物网站时,这个页面就相当于是一个视图,它向我们展示了各种各样的资源,在我们搜索手机这个资源时,就会发送出一个请求,此时,这个请求会交给 控制器(Controller),控制器针对这个请求就会选择对应处理模型(Model),对这个请求进行处理,而上图的展示的手机资源的页面,就相当于是处理模型处理的结果,由控制器再将这个视图返回给我们。

在这里插入图片描述

再举一个简单的例子:

比如我们去餐厅吃饭,服务员就会来接待我们,服务员就会将我们点的菜写在小本本上,然后交给前台,前台再交给厨师,厨师做完之后,就会再交给前台,前台再根据这个菜确定是哪个菜单,然后再让服务员交给客人,此时,服务员帮我们写菜单就相当于是一个视图,前台就相当于是控制器,厨师就相当于是模型

什么是 SpringMVC?

MVC 它是一种思想,而SpringMVC 它是将这种思想进行了实现,除此之外,SpringMVC 还是一种 Web 框架

比如,在创建 SpringBoot 项目时,所勾选的 Spring Web 框架就是SpringMVC框架,所以,可能就会产生这样的疑问:我们创建的不是SpringBoot项目吗,怎么变成了 SpringMVC 项目,它们俩之间到底有什么关系呢???

SpringBoot 和 SpringMVC 的关系

SpringBoot是2014年发布的,Spring是2004年发布的,在2014年发布之前,就不能⽤Spring实现MVC架构吗?当然不是了.

SpringBoot 只是实现 SpringMVC 的一种方式,SpringBoot 可以添加很多的依赖,借助这些依赖实现不同的功能,SpringBoot 就是通过添加 SpringWebMVC框架,来实现Web功能

举个例子:

比如做饭,我们做饭不是只能在厨房做,做饭这个事情在几千年就有了,只要有火有食材就可以做,所以做饭就比是 MVC,SpringBoot 就好比是厨房,通过在厨房里装燃气灶,装一些工具等,也可以实现做饭这个功能。

所以,如果想要实现 Web开发的话,就要引入这个 Web 框架

Spring在实现 MVC的时候,也做了一些改进:

直接把请求发给 控制器Controller,并不经过视图。就像我们去餐厅吃饭时,不需要服务员为我们记录菜单了,直接由前台记录,记录完之后交给厨师。

在这里插入图片描述

三层架构

现在MVC这种方式也已经不再使用了,而主流的是前后端分离,不再需要View这个模块了,不需要再关注于前端了,我们只要约定好接口,写好后端即可,所以,对于后端,也有了一种新的分层方式,就是三层架构,分为以下三层:

  1. 表现层:展示数据结果,和接收用户的请求
  2. 业务逻辑层:负责处理业务逻辑
  3. 数据层:负责存储和管理数据

按照这样的层次划分,Spring MVC 站在后端的角度上,就将代码分成了:

  1. Controller 层:控制层,用来接收前端发来的请求,在Service 层中选择对应的处理逻辑,并且给前端进行响应
  2. Service 层:业务逻辑层,对发来的请求进行具体的逻辑处理
  3. Dao 层:数据访问层,负责访问数据库,进行增删查改的操作

三层架构和MVC的关系

从概念上来讲,两者都是软件工程中的架构模式,并且两者也是非常相似的,就如下面这张图:

三层架构的“表现层”也就是对应着MVC的 View层 和 Ctroller层,因为它们都是用来展示数据和接收请求的,所以,站在后端人员的角度上看,其实, 表现层也可以看成是视图层,三层架构中的业务逻辑层和数据层对应的就是MVC中的model层,都是用来处理业务逻辑的。二者只不过是从不同角度上进行了抽象,MVC它强调的是数据和视图的分离,将数据的展示和数据的处理分开。通过控制器对两者进行结合。三层架构强调的是从不同纬度上对数据进行处理,以达到“高内聚,低耦合”

高内聚:一个模块中各个元素之间的联系的紧密程度,如果各个元素之间的联系程度越高,则内聚性越高,即“高内聚”。

低耦合:项目中,各个层或者模块间的依赖关联程度越低越好,不会因为修改一处代码,造成很多的代码都需要改动。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java学习【类与对象—封装】

Java学习【类与对象—封装】 封装的概念封装的实现包的概念import 导包导包中*的介绍import static 导入包中的静态方法和字段 static关键字的使用static 修饰成员变量static修饰方法静态成员变量的初始化 代码块静态代码块非静态代码块/实例化代码块/构造代码块加载顺序 封装的…

什么是外呼系统?企业为什么使用ai电销外呼系统

说起ai电销外呼系统,或许有的人并不了解这是什么,但它却常常出现在我们的生活中,今天我们来看看什么是外呼系统,企业为什么使用ai电销外呼系统? 一、什么是外呼系统 外呼系统就是由系统自动拨打电话的,外呼…

HTML常见标签-标题标签

标题标签 标题标签一般用于在页面上定义一些标题性的内容,如新闻标题,文章标题等,有h1到h6六级标题 代码 <body><h1>一级标题</h1><h2>二级标题</h2><h3>三级标题</h3><h4>四级标题</h4><h5>五级标题</h5>…

视频提取gif的手机端操作方法?看看这个就会了

Gif图片是一种非常流行的格式&#xff0c;广泛应用于社交媒体、网络宣传单等。它们能够轻松的吸引大众的注意力&#xff0c;在使用聊天软件的时候我们常常会使用gif动图表情包来调节聊天氛围。Gif动图比普通的图片有趣&#xff0c;也比视频的体积要小。我们想要通过手机来把视频…

从需求到实现:能源软件服务商如何量身定制企业解决方案

能源行业需要数字化转型的原因主要有以下几点&#xff1a;首先&#xff0c;数字化技术可以提高生产效率和安全性&#xff0c;通过实时监控和智能调度降低事故风险&#xff0c;并实现远程控制和自动化生产。其次&#xff0c;数字化转型有助于推动能源行业的创新发展&#xff0c;…

GPT-4o正式发布;零一万物发布千亿参数模型;英国推出AI评估平台

OpenAI 正式发布 GPT-4o 今天凌晨&#xff0c;OpenAI 正式发布 GPT-4o&#xff0c;其中的「o」代表「omni」&#xff08;即全面、全能的意思&#xff09;&#xff0c;这个模型同时具备文本、图片、视频和语音方面的能力&#xff0c;甚至就是 GPT-5 的一个未完成版。 并且&…

本地安装nvm,管理多版本node

先卸载本地的nodejs(14.16.1) 卸载的直接可以点击win10图标→设置→应用→应用和功能 卸载nodejs即可 2. 安装nvm&#xff0c;地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases 安装目录时尽量不要出现特殊字符还有空格&#xff0c;否则会在nvm use xxx的…

HTML常用标签-列表标签

列表标签 有序列表 分条列项展示数据的标签, 其每一项前面的符号带有顺序特征 无序列表 分条列项展示数据的标签, 其每一项前面的符号不带有顺序特征 有序列表标签 ol无序列表标签 ul列表项标签 li代码 <!-- 有序列表 --><ol><li>JAVA</li><li>前…

考研数学|强化《660》+《880》这样刷,太丝滑了❗️

660题880题需要大概两个月才能做完 660题和880题都是很高质量的题集&#xff0c;所以做起来一点也不轻松。 每年都会有学生暑假两个月只做了一本660题的情况&#xff0c;因为题目实在是太难&#xff0c;有点做不下去的感觉。 不过不要担心&#xff0c;暑假就是刷题发现问题的…

k8s 网络组件详细 介绍

目录 一 k8s 有哪些网络组件 二 k8s 网络概念 1&#xff0c; k8s 三种网络 2&#xff0c;K8S 中 Pod 网络通信 2.1 Pod 内容器与容器之间的通信 2.2 同一个 Node 内 Pod 之间的通信 2.3 不同 Node 上 Pod 之间的通信 三 Flannel 网络组件 1&#xff0c;Flannel …

C++干货--引用

前言&#xff1a; C的引用&#xff0c;是学习C的重点之一&#xff0c;它与指针的作用有重叠的部分&#xff0c;但是它绝不是完全取代指针(后面我们也会简单的分析)。 引用的概念&#xff1a; 引用 不是新定义一个变量 &#xff0c;而 是给已存在变量取了一个别名 &#xf…

【转载】【亲测可用】Ubuntu18.04安装VTK-8.2.0

这篇文章转载大部分都参考自下面的链接&#xff0c;注意cmake的版本&#xff0c;如果版本不对是编译失败的 https://blog.csdn.net/qq_42257666/article/details/124574029?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171566768016800182751339%2522%252C%2522…

Power query与Excel的区别,优势?

Power Query是Microsoft Excel的一个强大数据导入、转换和自动化的插件工具&#xff0c;它在Excel 2010之后的版本中被发布出来&#xff0c;随着时间的发展&#xff0c;功能不断增强。 以下是Power Query的一些优势以及它与Excel传统数据处理方式的区别和一些令人印象深刻的功…

【选型推荐】洁净室( 区) 悬浮粒子的测试方法及仪器选型

环境监测承担着环境污染控制措施有效性的评判者的角色。其本身不是一个控制措施&#xff0c;环境监测本身并不能够改变环境指标&#xff0c;降低污染。一个有效的环境监测体系是能反映洁净区内的粒子和微生物的真实水平。确认环境是否满足法规的要求&#xff0c;同时给予污染控…

【Java 演示灵活导出数据】

演示灵活导出数据 &#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;&#x1f389;【小吴小吴bug全无开通公众号】关注公众号获取第一时间博客动态 背景今天临时起兴打开稀土掘金导航栏看到页面推广gitee项目恰巧最近也在学习python了解到python爬虫很厉害&…

java基础之特殊类枚举

一、什么是枚举 枚举是JDK5新增特性&#xff0c;用来表示一组常量值&#xff0c;比如一年由四个季节&#xff0c;一年中有12个月份&#xff0c;、订单有未付款​、已付款、已发货、已收货状态等。 二、枚举的好处 ​用枚举来表示组常量值&#xff0c;可以避免非法值。 publ…

# 从浅入深 学习 SpringCloud 微服务架构(十八)

从浅入深 学习 SpringCloud 微服务架构&#xff08;十八&#xff09; 一、开源配置中心 Apollo&#xff1a;概述 1、开源配置中心 Apollo Apollo -A reliable configuration management system Apollo(阿波罗)是携程框架部门研发的分布式配置中心&#xff0c;能够集中化管理…

一篇文章告诉你:通信网优比计算机岗位好在哪?

据优橙2023年就业人员专业分布统计&#xff0c;通信专业学员占比32.7%&#xff0c;非通信专业学员占比64.8%&#xff0c;其他占比2.5%。 可见从事网优的学员中大部分为非通信专业。而非通信专业中72%的学生在学习通信网优还是计算机专业中&#xff0c;选择了通信网优。 为什么越…

聚焦光量子应用开发!Quandela 发布新版量子计算云服务

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1200字丨5分钟阅读 摘要&#xff1a;法国光量子计算公司 Quandela宣布推出新版量子计算云服务 Quandela Cloud 2.0&#xff0c;通过创新技术确保量…

很难找到全的!150个软件测试领域专业术语汇总

1. 单元测试&#xff08;Unit Testing&#xff09;&#xff1a;对软件中的最小功能单元&#xff08;通常是函数或方法&#xff09;进行测试&#xff0c;以验证其是否按预期工作。 2. 集成测试&#xff08;Integration Testing&#xff09;&#xff1a;测试不同模块之间的交互…