《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响应状态码。
相关文章:
《JavaEE进阶》----10.<SpringMVC应用分层:【三层架构】>
本篇博客我们主要讲解 1.应用的分层:三层架构 2.Spring MVC和三层架构的区别和联系 3.软件设计原则:高内聚低耦合 4.应用分层的好处 5.通过应用分层后的代码示例 一、三层架构简介 阿里开发手册中,关于工程结构部分,定义了常见工程的应用分层结构: 上图…...
【网络】网络通信的传输方式
目录 1.网络通信中的两种基本通信模式 1.1.怎么理解连接 1.2.面向有连接类型 1.3.面向无连接类型 2.实现这两种通信模式的具体交换技术 2.1.电路交换 2.2.分组交换 3.根据接收端数量分类 单播(Unicast) 广播(Broadcast) …...
数据仓库理论知识
1、数据仓库的概念 数据仓库(英文:Date Warehouse,简称数仓、DW),是一个用于数据存储、分析、报告的数据系统。数据仓库的建设目的是面向分析的集成化数据环境,其数据来源于不同的外部系统&#…...
容易中、见刊快的6本医学期刊推荐!
常笑医学整理了6本容易中、见刊快的医学期刊,以及期刊详细参数与投稿经验,供医生、医学生们在论文投稿时参考。投稿经历均来自常笑医学网用户真实分享,欢迎大家到常笑医学网分享自己的投稿经历和实用经验。 1.《中国医药科学》 (详…...
nnunetv2系列:使用默认的预测类推理2D数据
nnunetv2系列:使用默认的预测类推理2D数据 这里参考源代码nnUNet/nnunetv2/inference/predict_from_raw_data.py中给的示例进行调整和测试。 代码示例 from torch import device from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor# from nn…...
伺服电机如何计算扭矩——看这一篇就够了
#零基础学工控##西门子PLC##V90##电机##工控分享##自动化#工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群...
数据库C语言删除修改和输出
#include<myhead.h> #include<sqlite3.h> int out_callback(void *arg,int column_num, char **msgrow,char **msgcolumn)//输出查找的工人信息 { int i 0, j 0; while(i<column_num) { printf("%s\t" ,*(msgcolumni)); …...
插槽slot
一、简介: 插槽是 Vue 组件化开发中非常强大且灵活的工具,它使得组件的复用性和可定制性大大提高。通过合理地使用不同类型的插槽,可以构建出更加灵活和可维护的 Vue 应用程序。 二、使用场景 可重用组件的定制化 比如一个通用的弹窗组件&am…...
交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输
交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输。交换技术的核心目的是在不同的设备之间高效地传输数据,实现信息的互联互通。 一、交换技术的定义 交换…...
数仓建模:数仓设计中的10个陷阱
目录 0 引言 1 主要内容 1.1 过于迷恋技术,而没有将重点放在业务需求和目标上 1.2 没有或无法找到一个有影响的、平易近人的、明白事理的高级管理人员作为数仓建设的发起人 1.3 将项目处理为一个巨大的持续多年的项目,而不是追求更容易管理的、虽然…...
Vue如何将网页转换成图片或PDF并上传
一.使用html2canvas获取页面元素并绘制成图片 htmlcanvas中文文档 npm install --save html2canvas<template><div><button click"uploadImg">上传</button><div ref"yourDom"><!-- ...图片中页面内容 --><img s…...
【引领数据分析革命】TaskWeaver框架全景解读与入门指南!
亲爱的技术爱好者们,我是你们的老朋友—— 一个热爱.NET和AI相关技术的博主,在今天这个信息与数据爆炸的时代,我们始终寻求着处理数据分析任务的更优雅、更高效的方式。Microsoft团队推出了一个叫做TaskWeaver的神器,这可不仅仅是…...
LabVIEW灵活集成与调试的方法
在LabVIEW开发中,为了构建一个既便于调试又能灵活集成到主VI中的控制VI,开发者需要采用适当的编程方式和架构。常见的选择包括模块化设计、状态机架构以及事件驱动编程。这些方法有助于简化调试过程、提高系统的稳定性,并确保代码的重用性和可…...
网络药理学:分子对接之二:PDB数据库的使用(已知PDB ID)、PubChem数据库如果没有3D结构
PDB数据库使用 官方地址:https://www.rcsb.org/ 首页如下: 我们以热休克蛋白HSP90AA1为例,其PDB ID为7DHG,所以我们在搜索栏输入7DHG: 主要关注红框里的几个地方。 Download 下载文件,一般选择PDB For…...
JS获取页面中video标签视频的封面和时长
从HTML中提取Video信息 /*** 从html字符串中提取video标签* 入参: {String} htmlString* 出参:{Array} 数组*/ function extractVideosFromHTML(htmlString) {const dom new DOMParser().parseFromString(htmlString, text/html);const videos Arr…...
LLM大模型学习:AI Agent综述
AI Agent是什么 将LLM思想链接到一起,自主实现用户设定的任何目标。只需要告诉AutoGPT一个目标,能自主生成执行计划。 吴恩达:“与其争论哪些工作才算是真正的 Agent,不如承认系统可以具有不同程度的 Agentic 特性。” 核心在于…...
极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》
《DB 大咖说》第 13 期,邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。 在小红书平台上,“是否应将家里的电视升级为投影仪?”这一话题激发了上百万篇笔记的分享与推荐,反映出年轻群体对投影仪的偏好。随着手机、…...
IP学习——Fiveday
设备排错 [R1]display ip interface brief 查看路由器接口的IP地址信息 [R1]display current-configuration int g0/0/1.10 查看路由器接口的IP地址信息 TG---> trunk查看vlan指令:displayvan其中UT--->accessc.vlan确认完成后 即链路层配置完成排查网络层错误 排查终端主…...
格式化的硬盘能恢复数据吗?拯救数据的可能性
在信息技术高速发展的今天,硬盘作为计算机的核心存储部件,承载着大量的数据和文件。然而,有时因为误操作或其他原因,我们可能需要对硬盘进行格式化,这往往导致重要数据的丢失。 那么,格式化后的硬盘数据是否…...
亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理
近日,第二届网络空间安全(天津)论坛正式开幕。本届论坛由天津市政府主办,国家计算机病毒应急处理中心、天津市公安局、天津市滨海新区政府承办,国家网络与信息安全信息通报中心协办,围绕“共建网络安全 共治…...
新手必看:用T16IZ遥控器给PX4无人机对频,保姆级图文教程(附接线避坑点)
T16IZ遥控器与PX4无人机对频全指南:从零开始的安全操作手册 刚拿到T16IZ遥控器和PX4无人机套件时,面对密密麻麻的接口和陌生的专业术语,很多新手会感到无从下手。本文将以最直观的方式,带你一步步完成对频操作,同时避开…...
Wireshark网络协议分析技术与实践指南
1. 网络协议分析技术概述1.1 Wireshark工具简介Wireshark(前称Ethereal)是目前最主流的开源网络协议分析工具,采用WinPCAP接口直接与网卡进行数据报文交换。该工具支持超过2000种网络协议的解析,能够实时捕获和分析网络数据包。1.…...
OpenClaw 的模型服务是否支持限流和熔断?策略如何配置?
在讨论OpenClaw模型服务的限流与熔断机制之前,不妨先回想一下城市交通系统。早晚高峰时,交警会在关键路口设置信号灯或临时管制,防止车辆过度涌入导致整个区域瘫痪。模型服务面临的场景其实非常相似——外部请求就像不断驶入的车辆࿰…...
MedGemma与Ray集成:分布式医学AI训练
MedGemma与Ray集成:分布式医学AI训练 1. 引言 医学AI模型训练正面临着一个关键挑战:随着模型参数量的增加和医学数据集的扩大,单机训练已经无法满足需求。一张高分辨率CT影像可能达到GB级别,而完整的医学影像数据集往往需要TB级…...
当柔性车间遇上强化学习:从传统规则到DRL的调度进化史
柔性车间调度的智能革命:深度强化学习如何重塑制造业决策 在当今快节奏、定制化需求激增的制造业环境中,传统的生产调度方法正面临前所未有的挑战。想象一下,一个典型的电子设备制造车间:数百种不同规格的订单不断涌入,…...
完整指南:为什么选择WeChatMsg开源工具解决你的微信聊天记录备份与分析难题
完整指南:为什么选择WeChatMsg开源工具解决你的微信聊天记录备份与分析难题 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitH…...
遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析
遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析 当我们需要对大面积区域进行地表覆盖分析时,单景Sentinel-2影像往往无法满足需求。这时,多景影像的拼接与处理就成为关键步骤。本文将带您深入了解如何利用SNAP软件高效处理S…...
如何评价目前主流的AI论文生成软件?哪一款最好用?
目前主流 AI 论文工具已形成清晰的中文全流程、英文国际、文献 / 润色专项三大阵营,PaperRed、毕业之家是中文论文全流程首选,ChatGPT-4o、Claude 3.7适合英文与深度逻辑,Kimi、Elicit专攻文献处理。没有绝对 “最好”,只有最适配…...
nli-distilroberta-base实际作品:金融风控报告语义一致性检测效果可视化
nli-distilroberta-base实际作品:金融风控报告语义一致性检测效果可视化 1. 项目背景与价值 在金融风控领域,报告文档的语义一致性检测是确保业务合规性的关键环节。传统人工审核方式效率低下且容易遗漏细节,而基于自然语言理解(NLI)的技术…...
别再当黑匣子用了!手把手教你用FastMCP的tool()、resource()和prompt()装饰器,从源码理解到实战避坑
FastMCP装饰器深度解析:从tool()到prompt()的实战进阶指南 1. 为什么需要理解装饰器内部机制? 在Python开发领域,装饰器(Decorator)是一种强大的元编程工具,而FastMCP框架中的tool()、resource()和prompt()装饰器更是将这一理念发…...

