当前位置: 首页 > news >正文

《JavaEE进阶》----10.<SpringMVC应用分层:【三层架构】>

本篇博客我们主要讲解

1.应用的分层:三层架构

2.Spring MVC和三层架构的区别和联系

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

4.应用分层的好处

5.通过应用分层后的代码示例

一、三层架构简介

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

上图的表示层,也叫做表现层。

解释概念 

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

2.业务逻辑层(Service):处理业务逻辑,里面有复杂业务的具体实现。

3.数据层(Mapper/Dao):存储和管理与应用程序的相关的数据。

二、Spring MVC和三层架构的区别和联系

SpringMVC

三层架构 

 联系

二者其实是从不同角度对软件工程进行了抽象。 

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

三层架构强调不同维度数据处理的高内聚和低耦合,将交互界面,业务处理和数据库操作的逻辑分开.角度不同也就谈不上互相替代了,在日常的开发中可以经常看到两种共存的情况,比如我们设计模型层的时候往往也会拆分出业务逻辑层(Service层)和数据访问层(Dao层)。 

我的理解

区别

MVC架构模式组成:模型(Model)、视图(View)、控制器(Controller)

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

Spring MVC:是对MVC思想在Spring框架中的一种实现。

三层架构是对代码处理的不同的逻辑功能的封层。

我觉得他们是两个独立的思想。

MVC是站在前后端共同开发时,对开发的理解。V对应前端,MC对应后端。

而如今我们已经前后端分离进行开发,因此实际上MVC的思想其实是有点过时的。

三层结构就是对我们纯后端代码的分层。

联系

但是他们有共同的目的,就是使我们开发程序更加的清晰有条理。

从概念上讲:二者都是软件工程领域中的架构模式。

并且三层架构中的表现层,对应MVC的视图和控制器,

而MVC中的模型对应三层架构的业务逻辑层,数据层,实体类。

二者的目的是相同的,都是"解耦,分层,代码复用"

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

高内聚低耦合矛盾吗?

不矛盾

高内聚:指的是一个模块中各个元素之间的联系的紧密程度。

低耦合:指的是各个模块之间的紧密程度。

比如一个企业中,各个部门关联关系要尽可能小,一个部门发生问题,要尽可能降低对其他部门的影响,就是低耦合。

但是部门员工关系要尽量紧密,遇到问题一起解决。这叫高内聚。

比如人体的各个部位中,手、脚、胳膊、腿之间的影响比较小,使得当手受伤,对其他部位影响很小,这就是低耦合。

而人体中,肌肉、骨骼、肌腱等需要相互配合,才能使得人们可以灵活运动。这就需要高内聚,紧密相连。

四、应用分层的好处

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

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

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

4.利于标准化。

五、通过应用分层后的代码示例

比如我们写的图书管理系统。如今我们主框架创建三个软件包。

1.Controller

2.Service

3. Mapper

六、SpringMVC大总结 

1、十一个注解

对于SpringMVC。实际就学习各种Web开发需要用到的注解

a、@RequestMapping:路由映射

b、@RequestParam:后端参数重命名

c、@RequestBody:接收JSON类型的参数。

d、@PathVariable:接收路径参数

e、@RequestPart:上传文件

f、@ResponseBody:返回数据

g、CookieValue:从Cookie中获取值。

h、@SessionAttribute:从Session中获取值

I、@RequestHeader:从Header中获取值。

j、@Controller、返回视图。定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理。

k、@RestController、返回数据:@ResponseBody+@Controller

2.Cookie和Session

Cookie是客户端机制。

Session是服务器机制。

两者通过SessionID来关联。SpringMVC 内置HttpServletRequest,HttpServletResponse

两个对象,需要时使用。直接在方法中添加对应的参数即可。

Cookie和Session可以从HttpServletRequest中来获取,也可以直接使用。HttpServletResponse

设置Http响应状态码。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • StarRocks 培训课程重磅上线!专家出品,助你升级打怪不走弯路!
  • A Tutorial on Near-Field XL-MIMO Communications Towards 6G【论文阅读笔记】
  • 前端正确设置资源上下文路径ContextPath(发布目录outDir 、公共基础路径),保证打包部署后站点能正常加载资源。
  • Session、Cookies 和 Token 的关系详解
  • 跨国公司研发战略调整与中国IT产业的未来
  • 如何使用 ONNX 结合 GPU 加速推理(CUDA 与 cuDNN 简明指南)
  • 操作系统 --- 线程(Threads)概念 多线程模型 线程控制与组织
  • 【Kubernetes】常见面试题汇总(五)
  • 国庆假期出行必备!西圣PB充电宝!外出旅游出行好搭档!
  • 【零基础学习CAPL语法】——on message
  • OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用
  • 威胁建模中的评估问题列表
  • 鸿蒙轻内核A核源码分析系列七 进程管理 (1)
  • nacos 高级 配置管理 动态路由
  • HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验
  • [笔记] php常见简单功能及函数
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • eclipse(luna)创建web工程
  • es6
  • HTTP中GET与POST的区别 99%的错误认识
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Iterator 和 for...of 循环
  • mysql_config not found
  • Python爬虫--- 1.3 BS4库的解析器
  • Redis中的lru算法实现
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue2.0 实现互斥
  • 阿里云购买磁盘后挂载
  • 构建二叉树进行数值数组的去重及优化
  • 基于webpack 的 vue 多页架构
  • Mac 上flink的安装与启动
  • 如何正确理解,内页权重高于首页?
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #14vue3生成表单并跳转到外部地址的方式
  • #图像处理
  • #预处理和函数的对比以及条件编译
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)SpringCloud 整合Python
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (Oracle)SQL优化技巧(一):分页查询
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (四)事件系统
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (自用)仿写程序
  • .Net Core 生成管理员权限的应用程序
  • .NET Framework杂记
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 设计模式初探
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)