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学习阶段会涉及到较多的工具,插件的学习.

 

 

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

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

相关文章

交易的成功并非仅依赖于拥有强大的工具,而在于如何用好你的工具

任何领域伟大的成就往往源于个人不屈不挠地克服重重障碍的能力,这种毅力和决心并非普通人所具备,因此他们往往只能停留在普通和平凡的层面。 而对于那些渴望在交易领域取得卓越成就的人来说,坚持采用一套经过验证且有效的交易系统&#xff0c…

11 html 学习/作业

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><a href"./index.html">首页</a><a href"https://www.baidu.com/">百度</a><a h…

使用Windows的“远程桌面连接”Ubuntu主机连接不上问题解决

问题描述&#xff1a; 使用Windows自带的“远程桌面连接”来连接自己的Ubuntu的系统的过程中&#xff0c;自己已经成功安装了 xrdp 文件包&#xff0c;但是在使用“远程桌面连接”时&#xff0c;自己的“远程桌面连接”软件在输入Ubuntu系统的用户名和密码后&#xff0c;连接不…

Python爬虫实战—探索某网站电影排名

文章目录 Python爬虫实战—探索某网站电影排名准备工作编写爬虫代码代码解析运行情况截图进一步优化和说明完整代码总结 说明&#xff1a;本案例以XXX网站为例&#xff0c;已隐去具体网站名称与地址。 Python爬虫实战—探索某网站电影排名 网络爬虫是一种自动化程序&#xff0…

txt、pdf等文件转为一行一行的doccano数据集输入格式

文章目录 doccano 数据集导入简介代码实现代码运行结果代码公开 doccano 数据集导入 在Doccano 导入数据集时&#xff0c;使用TextLine的文件格式&#xff0c;导入的文件需要为一行一行文本的数据格式&#xff0c;每一行文本在导入Doccano后就是一条数据。 简介 主要工作说明…

LeetCode-热题100:17.电话号码的字母组合

题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a; digits “23” 输出&a…

运用YOLOv5实时监测并预警行人社交距离违规情况

YOLO&#xff08;You Only Look Once&#xff09;作为一种先进的实时物体检测算法&#xff0c;在全球范围内因其高效的实时性能和较高的检测精度受到广泛关注。近年来&#xff0c;随着新冠疫情对社交距离管控的重要性日益凸显&#xff0c;研究人员开始将YOLO算法应用于社交距离…

python知识点总结(七)

python知识点总结七 1、堆和栈的区别2、如何在局部修改全局的变量a、计算结果b、计算结果 3、如何修改一个enclosing变量4、关于值传递还是地址传值5、布尔类型6、逻辑运算7、字符串切片操作8、取整、取余、除数9、变量赋值10、字符串与数字相乘11、整型、浮点型、字符型之间相…

List系列集合:ArrayList、LinkedList --java学习笔记

List系列集合 特点&#xff1a;有序、可重复、有索引 ArrayList&#xff1a;有序、可重复、有索引LinkedList&#xff1a;有序、可重复、有索引 List集合的特有方法 List集合因为支持索引&#xff0c;所以多了很多与索引相关的方法&#xff0c;当然&#xff0c;Collection的…

什么是UI设计?适合做UI设计的软件有哪些?

人们常说 UI 和 UI 设计&#xff0c;但到底什么是 UI 设计&#xff1f;UI 设计的原则是什么&#xff1f;实际上 “UI" 也就是 User Interface&#xff0c;它是用户界面的缩写。一般指用户操作界面&#xff0c;即软件程序、网站或设备的图形部分&#xff0c;用户与之互动。…

MyBatis3源码深度解析(十九)MyBatis日志实现

文章目录 前言第七章 MyBatis日志实现7.1 Java日志体系7.1.1 常用日志框架7.1.2 Java日志发展史7.1.3 日志接口与日志实现的绑定 7.2 MyBatis日志实现7.2.1 Log接口7.2.2 LogFactory工厂7.2.3 MyBatis日志自动查找7.2.4 MyBatis日志类型配置 7.3 小结 前言 日志是Java应用中必…

【合合TextIn】深度解析智能文档处理技术与应用

目录 一、智能文档处理介绍 二、文档格式解析 三、图像增强技术解析 四、传统文字识别OCR技术解析 五、深度学习OCR技术解析 六、深度学习版面分析技术解析 七、文档分类 八、信息抽取 九、系统集成&#xff1a;将IDP处理后的数据集成到企业系统 结论 一、智能文档处…

机器学习-06-无监督算法-01-划分聚类Kmeans算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中无监督算法&#xff0c;包括划分聚类等。 参考 数据分析实战 | K-means算法——蛋白质消费特征分析 欧洲48国英文名称的来龙去脉及其国旗动画 Kmeans在线动态演示 本门课程的目标 完成一个特定行业的…

如何与手机共享笔记本电脑的互联网?这里提供详细步骤

这篇文章介绍了如何通过将手机变成Wi-Fi热点来与手机共享笔记本电脑的互联网连接。 如何共享笔记本电脑的互联网连接 你可以通过Wi-Fi或有线共享笔记本电脑的数据连接,具体取决于你的设置。 Windows Windows允许你通过ICS共享你的互联网连接。ICS,或称互联网连接共享,是W…

ARM Coresight 系列文章 11.1 -- CoreSight Cortex-M33 CTI 详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 CTI 的工作原理CTI 主要特点CTI的使用场景CTI 的工作原理 CTI 允许不同的调试和追踪组件之间基于特定事件进行交互。例如,当一个断点被命中时,CTI 可以用来触发内存的追踪捕捉或者外部仪器的行为,反之亦然。这种…

【华大 HC32L110】调用`printf`和串口接收中断的冲突问题解决

华大单片机 HC32L110调用printf和串口接收中断的冲突问题解决&#xff0c;经过查找是官方库 去使能了 串口的接收功能&#xff0c;记录解决问题的过程 目录 1.硬件MCU资料2. printf和串口接收中断的冲突解决3.重新封装 fputc 函数4.查找问题&#xff0c;发现是官方库配置有误5.…

无线局域网——wlan

目录 一.wlan的含义和发展 二.wlan技术带来的挑战 1.企业办公场景多样 2.位置速度的要求 3.安全的要求 4.规范的挑战 三.家庭和企业不同的部署需求 1.胖AP模式组网 2.AC瘦AP模式组网 3.组网模式的不同 四.三层隧道转发实验 1.拓扑 2.AP上线 核心交换机vlan ​编辑…

探索海外市场舆情:云手机助力企业赢得全球竞争

在全球化的趋势下&#xff0c;越来越多的企业将目光投向海外市场&#xff0c;迎接着无尽的商机与挑战。然而&#xff0c;随之而来的是境外市场舆情的复杂变化&#xff0c;对企业的声誉和发展带来了潜在风险。如何准确、及时地掌握境外市场的舆情动向&#xff0c;成为了企业必须…

Midjourney发布新特性风格参考

1. 引言 最近&#xff0c;Midjourney 推出了Style Reference V2.0 即功能更加强大的风格参考工具&#xff0c;该工具可以让大家参考其他图像的风格&#xff0c;生成与参考图像风格保持一致&#xff0c;与文本提示词语义内容保持一致的图像。它与图像提示类似&#xff0c;但是只…

Day03-数据库管理(事务管理,用户管理,MySQL8的部分新特性)

文章目录 Day03 数据库管理学习目标1. 事务管理1.1 事务的概念1.2 事务的特性1.3 语法1.4 事务的并发问题1.5 事务隔离级别1.6 设置和查看隔离级别 2 用户管理2.1 创建删除用户2.2 权限管理2.2.1 权限赋予的原则2.2.2 权限赋予2.2.3 权限回收2.2.4 登录管理 3. MySQL8的部分新特…