MVC和三层架构

news2024/11/25 10:55:04

👉参考文章:mvc简介,mvc与三层架构的区别

一.MVC是什么?

Model-View-Controller(MVC)是一种软件架构模式,是软件设计模式的体现  ,用于组织代码并分离关注点,广泛应用于用户界面的开发中。该模式将相关程序逻辑划分为三个相互关联的组成部分:模型(Model)、视图(View)和控制器(Controller) 。MVC 模式最初用于桌面图形用户界面(Graph User Interface,GUI),但后来因设计 Web 应用程序而变得流行。许多流行的编程语言都有 MVC 框架,这些框架促进了 MVC 模式的实现。常见的 MVC 框架有 Spring、Django 和 Ruby on Rails。

二.背景

下面以JSP,SEVLET和DAO(Data Access Object(数据访问对象))举例来具体介绍MVC。

起初的web程序是用处理动态网页的Servlet,jsp和处理静态网页的html,xml等文件组成的。

我们都知道JSP(Java Server Pages)是一种动态网页技术标准,由Sun Microsystems公司主导创建。它部署于网络服务器上,能够响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。尽管JSP页面看起来像是普通的Web页面,但实际上它们是由系统编译成一个Servlet,而Servlet再响应用户请求。JSP页面的动态内容是通过Servlet输出流中输出HTML静态页面来实现的,每个JSP页面大体上是相同的,只是页面中显示的内容和页面布局不同。因此,可以说JSP的本质是一个简化的Servlet设计,它允许开发者通过一种类似于HTML的标记语言来编写动态网页内容,而不需要编写复杂的Java代码。这种设计使得JSP成为Web开发中一种非常受欢迎的技术,因为它提供了易于使用的标记语言和强大的动态内容生成能力‌。

因此,JSP最终还是要转化成SERVLET,所以说JSP在本质上就是SERVLET,但是两者的创建方式不一样。

Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不美观。
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页。

然而,它们都可以包含java代码,就意味着,都可以处理请求和响应请求,连接jdbc调用数据库的数据,这样一来,大家就瞎用,容易混乱,为了让结构更清晰,同一一个规范,我们让它们分工明确,就设计出了MVC架构。


这样,在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页。

控制器的功能:

控制器C控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

由于控制各种请求和响应的我们就交给SERVLET去做,所以SEVLET就可以看成是Controller。

视图的功能:

 视图V视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

由于JSP可以包含html,所以可以很好地将获得的数据展现出来,所以JSP可以看成是View。

模型的功能:

MVC是表现层的架构,MVC的Model实际上是ViewModel,即供View进行展示的数据。

模型M模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

这里jdbc连接数据库,用DAO来访问数据库数据,将访问到的数据放进要显示的页面这一过程对应的是MVC中的模型。

三.三层架构是什么

参考文章:三层架构简介

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

表示层

  • 表示层,又称界面层,是与用户交互的界面。位于最外层/最上层,离用户最近,用于接收用户输入的数据和显示处理后用户需要的数据。

  • 【接受请求,封装数据,调用业务逻辑层,响应数据(servlet,jsp)】

业务逻辑层


业务逻辑层,又称服务层,是表示层和数据访问层之间的桥梁。位于中间层,用来处理业务逻辑,具体包含:验证、计算、业务规则等等。


数据访问层


数据访问层,是对数据库访问的层。位于最里层/最下层,主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。


层与层的关系


表示层依赖于业务逻辑层
业务逻辑层依赖于数据访问层

总结:总的来说,mvc存在于三层架构的表示层中,无论是mvc还是三层架构,目的都是使得结构更加清晰,分工更加明确。MVC中的控制器,视图,模型之间是相互协作关系;三层架构中的业务层,逻辑层和数据访问层之间是相互依赖关系,设计符合高内聚,低耦合的思想。

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

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

相关文章

GPS和桩号互转

文章目录 前言一、通过bigmap软件生成坐标信息csv二、Java实现1.CSV分隔2.计算2.1 读取gps_data.csv2.2 读取piles.csv2.3 进行线性插值2.4 返回值实体2.5 根据GPS坐标计算距离工具2.6 根据GPS坐标读取桩号2.7 根据桩号读取GPS坐标(根据距离计算,找到最近的桩号) 前…

短视频SDK解决方案,智能技术加持,提升创作效率

随着社交媒体、直播电商、在线教育等领域的蓬勃发展,短视频以其独特的魅力迅速崛起,成为内容创作与传播的新风口。为了助力企业和个人轻松拥抱视频化趋势,美摄科技匠心打造了一套高效、易用的短视频SDK解决方案,以“轻编辑&#x…

【高级IO-2】IO多路转接之Select(概念及代码实例)

文章目录 I/O 多路转接 之 Select1. 了解select2. select 函数原型① fd_set 结构② 详细理解参数(readfds为例) 3. 理解select的执行过程4. select代码实例:监视多个文件描述符5. Socket就绪条件6. select代码实例:多路复用服务器…

每日掌握一个科研插图·2D密度图|24-08-21

小罗碎碎念 在统计学和数据可视化领域,探索两个定量变量之间的关系是一种常见的需求。为了更深入地理解这种关系,我们可以使用多种图形表示方法,这些方法在本质上是对传统图形的扩展和变体。 散点图:这是最基本的图形&#xff0c…

什么是 JavaConfig?

什么是 JavaConfig? 💖The Begin💖点点关注,收藏不迷路💖 JavaConfig是Spring框架的一项创新,它允许开发者使用纯Java代码来配置Spring IoC容器,从而避免了繁琐的XML配置。这一特性带来了诸多优…

【微信小程序】导入项目

1.在微信开发工具中,点击【导入项目】 2.在打开的界面中执行2个步骤 1.找到要导入项目的路径2.AppID要改成自己的AppID 3.package.json包初始化【装包之前要确保有package.json文件】 1.在【资源管理器】空白处,点击鼠标右键,选择【】&am…

免费的真是太香了!Chainlit接入抖音 Coze AI知识库接口快速实现自定义用户聊天界面

前言 由于Coze 只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPT web/open webui等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办…

[Python可视化]空气污染物浓度地图可视化

[Python可视化]空气污染物浓度地图可视化,果然是路边浓度最大 在本篇文章中,我将展示如何使用 Python 结合 OSMnx、NetworkX 和 GeoPandas 等库,计算给定路径的最短路线,并基于该路径穿过的网格单元计算总污染量。最终&#xff0c…

uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败

场景:使用 uni.saveImageToPhotosAlbum 保存图片,其他手机都是可以的,但在鸿蒙系统的手机上出现了bug,报错Object {errMsg:"savelmageToPhotosAlbum:fai..errMsg:savelmageToPhotosAlbum:fail invalid filetype"} 原因&…

数学建模学习(116):全面解析梯度下降算法及其在机器学习中的应用与优化

文章目录 1.梯度下降简介1.1 梯度下降的数学原理1.2 学习率的选择2 梯度下降变体3.梯度下降优化器3.1 动量法(Momentum)3.2 AdaGrad3.3 RMSprop3.4 Adam3.5 Python 使用不同优化器训练线性回归模型4.案例:使用梯度下降优化加利福尼亚房价预测模型4.1. 数据准备4.2. 模型训练…

【dotnet】Ubuntu 24.04安装dotnet 8.0报错

我的环境是Ubuntu 24.04,64位,使用azure的虚拟机。 报错文字如下: kidfuazurefu:~$ sudo apt install dotnet-sdk-8.0 Reading package lists... Done Building dependency tree... Done Reading state information... Done Some packages c…

数学生物学-3-固定点、稳定性和蛛网图(Fixed Points, Stability, and Cobwebbing)

在前一篇博客中,我们研究了一些离散时间模型的例子。特别是,我们推导出了离散逻辑方程的重要例子。 数学生物学-2-离散时间模型(Discrete Time Models)-CSDN博客 在本篇文章中,我们将考虑离散时间模型的一般形式(在数…

超声波水表是什么?量程比又是什么?

一、超声波水表概述 1.定义: 超声波水表是一种利用超声波技术来测量水流速度,进而计算出流经管道的水体积流量的计量设备。它通过发送和接收超声波信号的时间差来确定水流的速度,从而精确地计量水的流量。 2.工作原理: 超声波…

勇闯计算机视觉(第一关--环境激活)

以下内容,皆为原创,制作实属不易,多谢帅锅和镁铝观看和关注。 一.什么是计算机视觉 计算机视觉是人工智能的一个分支,它使计算机能够从图像或多维数据中解释和理解视觉信息。计算机视觉的目标是模拟人类视觉系统的能力&#xff0c…

普元EOS-数据实体运行时动态增加property

1 前言 在Java开发读取数据的时候,一般都采用ORM方式将数据表的字段映射到实体对象中。 数据表中有一个字段,实体对象就有一个字段。 但很多时候,我们在读取的数据和显示的数据不同,比如,读取的是部门id&#xff0c…

java多线程(七)AQS(AbstractQueuedSynchronizer)技术解析:以赛跑起跑场景为例

AQS概括 核心思想 AQS(AbstractQueuedSynchronizer)是Java并发包中的一个核心同步器框架,它定义了一套多线程访问共享资源的同步机制。 其核心思想是:利用一个volatile的int类型的变量state来表示同步状态,并通过一…

微信自动回复,周末也能轻松应对!

相信很多人都有过这样的经历:休息的时候,手机响个不停,生怕漏掉一个客户消息,结果一不小心就让客户流失了! 要想解决这个问题,你只需一个多微管理系统,让我们一起来看看它的自动回复设置吧&…

这个方法完美解决我的Jenkins插件不能下载安装的问题

1、打开这个地址(前提是jenkins是开启的哦)http://localhost:8080/pluginManager/advanced 。 2、在最下面update site 改成http://updates.jenkins.io/update-center.json 。 3、服务列表中关闭jenkins,再重新启动,就能联网下载了…

叉车AI行车防撞监控系统方案,二级报警区域,守护人与车的安全!

九盾叉车AI行车防撞监控系统安装在叉车驾驶室顶的前后单独安装ADAS摄像头,结合深度学习算法以完成机器视觉的识别工作,分别安装在车辆护顶架前后方,进行180二级区域视频监控,同时解决二个方向维度的视野盲区,可根据距离…

数据结构(6.2_4)——图的基本操作

注&#xff1a;只探讨邻接矩阵和邻接表怎么实现图的基本操作 Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y) 领接矩阵 邻接表 有向图&#xff1a; Neighbors(G,x):列出图G中与结点x邻接的边 有向图 InsertVertex(G,x):在图G中插入顶点x DeleteVertex(G,x):在图G中删除…