Spring Web MVC入门(6)

应用分层

在开发的过程中, 我们会发现, 程序的代码有时会很"杂乱", 如果后面的项目更大了, 那就会更加地杂乱无章(文件乱, 代码内容乱).

也基于此, 接下来让我们来学习一下应用分层.

也类似于公司的组织架构

公司初创阶段, 一个人身兼数职, 既做财务, 又做人事,还有行政.

随着公司的逐渐壮大, 会把岗位进行细分, 划分为财务部门, 人事部门, 行政部门等.各个部门内部还会再进行划分.

项目开发也是类似, 最开始功能简单时, 我们会放在前后端一起开发. 随着项目功能的复杂, 我们分为前端和后端不同的团队, 甚至更细粒度的团队. 后端开发也会根据功能再进行细分. MVC就是其中的一种拆分方式.

但是随着后端人员不再涉及前端, 后端开发又有了新的分层方式.

介绍

在阿里开发手册中, 关于工程结构部分, 定义了常见工程的应用分层结构:

那什么是应用分层呢?

应用分层是一种软件开发设计思想, 它将应用程序分成N个层次, 这N个层次分别负责各自的职责, 多个层次之间协同提供完整的功能. 根据项目的复杂度, 把项目分成三层, 四层或者更多层

常见的MVC设计模式, 就是应用分层的一种具体体现.

为什么需要应用分层?
在最开始的时候, 为了让项目快速上线, 我们是通常不考虑分层的. 但是随着业务越来越复杂, 大量的代码混在一起, 会出现逻辑不清晰, 各模块相互依赖, 代码扩展性差, 改动一处就会让全身出现问题. 所以学习项目分层就是程序员的必修课了.

如何分层(三层架构)?

我们知道, MVC就是把整体的系统分成了Model(模型), View(视图) 和Controller(控制器)三个层次, 也就是将用户视图和业务处理隔离开, 并通过控制器连接起来, 很好地实现逻辑与表现的解耦, 是一种标准的软件分层架构.

目前现在更主流的开发方式是"前后端分离"的模式, 后端开发工程师不再关注前端的实现, 所以对于Java后端开发者, 又有了一种新的分层架构: 把整体架构分为表现层, 业务逻辑层和数据层. 这种分层方式也称为"三层架构"

1.表现层: 就是展示数据结果和接收用户指令的, 是最靠近用户的一层;

2.业务逻辑层: 负责处理业务逻辑, 里面有复杂业务的具体实现;

3.数据层: 负责存储和整理与应用程序相关的数据.

 按照上面的层次划分, Spring MVC站在后端人员的角度上, 也进行了支持, 把上面的代码划分为三个部分:

请求处理, 响应数据: 负责, 接收页面的请求, 给页面响应数据.

逻辑处理: 负责业务逻辑处理的代码.

数据访问: 负责业务数据的维护操作, 包括增, 删, 查, 改等操作.

 

Controller:控制层. 接收前端发送的请求, 对请求进行处理, 并响应数据.

Service:业务逻辑层. 处理具体的业务逻辑.

Dao:数据访问层, 也称为持久层. 负责数据的访问操作, 包括增删查改. 

MVC和三层架构的区别和联系

 在它们的联系上, 众说风云, 能够自己说出自己的观点即可.

从概念上来讲, 它们都是软件工程领域中的架构模式.

MVC三层架构模式由三部分组成, 分别是: 模型, 视图, 控制器.

三层架构将业务应用划分为: 表现层, 业务逻辑层, 数据访问层.

MVC中, 视图和控制器合起来对应三层架构中的表现层. 模型对应三层架构中的业务逻辑层, 数据层以及实体类.

两者实际上是从不同角度上对软件工程进行了抽象.

MVC模式强调数据和视图的分离,将数据展示和数据处理分隔开, 通过控制器对两者进行组合.

三层架构强调的是不同维度数据处理的高内聚和低耦合,将交互界面, 业务处理和数据库操作的逻辑分开.

两者共同的目的都是: "解耦, 分层, 代码复用".

软件设计的原则:高内聚低耦合

高内聚指的是: 一个模块中各个元素之间联系的紧密程度, 如果各个元素(语句,程序段)之间的联系程度越高, 则内聚性越高, 即"高内聚".

低耦合指的是: 软件中各个层, 模块之间的依赖关联程序越小越好. 修改一处代码, 其它模块的代码改动越少越好.

高内聚和低耦合矛盾吗?

不矛盾, 高内聚指的是一个模块中各个元素之间的紧密程度, 低耦合指的是不同模块之间的紧密程度.

这就好比一个企业, 包含很多部门, 各个部门之间的关联关系要尽可能的小, 一个部门发生问题,要尽可能对降低的其它部门减小影响, 就是耦合. 但是部门内部员工关系要尽可能紧密, 遇到问题一起解决, 克服, 这叫做内聚.

应用分层的好处

降低层与层之间的依赖, 结构更加的明确, 利于各层逻辑的复用.

开发人员可以只关注整个结构中的其中的某一层, 极大地降低了维护成本和维护时间.

可以很容易的用新的实现替换原有层次的体现

有利于标准化.

大总结

1.学习Spring MVC, 其实就是学习各种Web开发需要用到的注解.

(1)@RequestMapping: 路由映射

(2)@RequestParam: 后端参数重命名

(3)@RequestBody: 接收JSON类型的参数

(4)@PathVariable: 接收路径参数

(5)@RequestPart:上传文件

(6)@ResponseBody: 返回数据

(7)@CookieValue: 从Cookie中获取值

(8)@SesssionAttribute: 从Session中获取值

(9)@RequestHeader: 从Header中获取值

(10)@Controller: 定义一个控制器, Spring框架启动时加载, 把这个对象交给Spring管理.默认返回视图

(11)@RestController: @RequestBody + @Controller 返回数据.

2.Cookie和Session都是会话机制, Cookie是客户端机制, Session是服务端机制. 两者通过SessionId来关联. Spring MVC内置HttpServletRequest, HttpServletResponse两个对象.需要使用时, 直接在方法中添加对应参数即可, Cookie和Session可以从HttpServletRequest中获取, 也可以直接使用HttpServletResponse设置Http响应状态码.

3.JavaEE学习阶段会涉及到较多的工具,插件的学习.

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】stringstream类 最全超详细解析(什么是stringstream? stringstrem有哪些作用? 如何在算法中应用?)

目录 一、前言 二、stringstream 是什么 ? 三、stringstream 的用法 ✨构造函数 ✨输出字符串 ✨两种构造函数带来的不同 ✨修改、清空 stringstream 内容 四、stringsteam 的用途 ✨ 利用 stringstream 去除字符串空格 ✨ 利用 stringstream 指定字符分割字符…

【RPG Maker MV 仿新仙剑 战斗场景UI (六)】

RPG Maker MV 仿新仙剑 战斗场景UI 六 法术战斗窗口代码仿新仙剑效果 法术战斗窗口 这次来水点内容 由于之前已经做过了仿新仙剑的法术及物品窗口因此本次两篇内容,就来水点内容!!! 由于帮助窗口之前已经做过,因此直接…

课程思政元素收集遴选系统|基于JSP技术+ Mysql+Java+ B/S结构的课程思政元素收集遴选系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

CVPR 2024 | 长时舞蹈生成:数秒钟可生成极长的3D舞蹈

论文题目: Transparent Image Layer Diffusion using Latent Transparency 论文链接: https://arxiv.org/abs/2402.17113 代码仓库: GitHub - layerdiffusion/LayerDiffuse: Transparent Image Layer Diffusion using Latent Transparency 目…

PR无法在指定轨道上粘贴

在Adobe Premier Pro 2022中,按照视频教程复制(Ctrl C)、粘贴(Ctrl V)一段视频素材时,不能粘贴到点亮的轨道上,尝试了几次都不行。 最后找到了原因。 在快捷键设置中,发现CtrlV快捷键对应的是,粘贴到同一轨道&…

在线教育资源管理系统|基于JSP技术+ Mysql+Java的在线教育资源管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比

一文了解AI长文本工具:Kimi Chat;与ChatGPT比较对比 在人工智能领域,ChatGPT、Claude2.1和Kimi Chat都是备受关注的大型模型。它们在文本生成、理解和处理方面展现了强大的能力。本文将深入探讨这三个工具的核心功能、优劣势以及适用场景&am…

人工智能驱动的对话背后的魔力

未来交流革命:了解对话式AI的关键优势 在不断发展的技术世界中,人工智能驱动的对话处于创新的前沿,改变了企业与客户互动和管理关系的方式。 这篇博文深入探讨了对话式人工智能的迷人世界,探讨了其当前的趋势、应用程序以及它在重…

聚焦“新质职校“发展,企业力量赋新能

聚焦"新质职校"发展 一、什么是“新质生产力” 新质生产力自2023年9月被首次提出后,便成为经济热词。在最近的全国“两会”中,新质生产力这一议题引起了广泛关注。新质生产力,作为对传统生产力概念的全面升级,是对当前…

《数字集成电路物理设计》学习笔记(持续更新中)

参考书籍: 《数字集成电路物理设计》pdf下载百度云链接: 链接: https://pan.baidu.com/s/1jOD54q_f9KLhfX6InabTRA?pwd8888 提取码: 8888 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v8的分享 目录 第1章 集…

STM32关于使用定时器触发ADC转换的理解

以STM32 ADC的常规通道为例(注入通道类似): 如上图,STM32 ADC的常规通道可以由以上6个信号触发任何一个,我们以使用TIM2_CH2触发ADC1,独立模式,每次仅测一条通道,则ADC的配置如下&am…

个人信息-求职[web前端]

我有近近10年开发及6年的管理经验Web前端,所负责的技术团队经历了 Web 前端几代技术变革,参与了几乎,在性能优化、开发效率、所有前端相关项目工程化架构选型上都有丰厚的产出。在上家致力于数据安全前端的相关工作,专注于Vue.js技术栈来推进…

慎投!新增5本期刊被剔除!数据库期刊目录更新

毕业推荐 SSCI(ABS一星) • 社科类,3.0-4.0,JCR2区,中科院3区 • 13天录用,28天见刊,13天检索 SCIE: • 计算机类,6.5-7.0,JCR1区,中科院2区…

Docker jupyter 容器中添加matplotlib 中文支持

本教程基于 jupyter/datascience-notebook,适用其他容器。 # 查看所有 Docker 容器 docker ps -a # 进入已经运行的 Jupyter 容器 docker exec -it CONTAINER_ID bash 本例中CONTAINER_ID为2e # 切换到 matplotlib 的字体目录(find / -name "…

基于springboot+vue的民族婚纱预定系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Linux部署MySQL

Linux部署MySQL5.7.17 mkdir /opt/mysql cd /opt/mysql#mysql下载官网: #https://downloads.mysql.com/archives/community/ #下载server、client、lib和common wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.17-1.el7.…

JavaScript高级(十七)---异步函数await-async

异步函数 async function 异步函数的内部代码执行过程和普通的函数是一致的,默认情况下也是会被同步执行。 async function foo() {console.log("foo function start~")console.log("内部的代码执行1")console.log("内部的代码执行2&quo…

ISIS骨干网连续性简述

默认情况下, 一、L1路由器是ISIS 普通区域内部路由器,只能与L1和L1-2路由器建立邻接关系,不能与L2路由器建立邻接关系。 二、L2路由器是骨干区域的路由器,L2路由器只能与其他 L2路由器同处一个区域,可与本区域的L2路由…

数值分析(三) Lagrange(拉格朗日)插值法及Matlab代码实现

目录 前言一、Lagrange(拉格朗日)插值1. 线性插值2. 抛物插值3. 拉格朗日插值多项式 二、Lagrange插值算法及matlab代码1. Lagrange 插值算法matlab实现2 实例3. 线性插值示意图代码4. 抛物插值示意图代码 三、总结四、插值法专栏 前言 本篇为插值法专栏…

生产计划数据模型,实现能源企业数字化高效管理

随着市场经济的快速发展,能源企业在经济发展中的地位也随之提高。但由于能源企业在生产计划经济管理上存在指标不平衡、市场观念落后和环保意识欠缺等问题,导致企业的经济效益降低。目前,提高企业的生产计划管理是改善能源企业现状最有利的途…