【JavaEE进阶】应用分层

目录

🎋序言

🍃什么是应用分层

🎍为什么需要应用分层

🍀如何分层(三层架构)

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

🌳什么是高内聚低耦合


🎋序言

通过上⾯的练习,我们学习了SpringMVC简单功能的开发,但是我们也发现了⼀些问题

⽬前我们程序的代码有点"杂乱",然⽽当前只是"⼀点点功能"的开发.如果我们把整个项⽬功能完成呢? 代码会更加的"杂乱⽆章"(⽂件乱,代码内容乱)

🍃什么是应用分层

也基于此,咱们接下来学习应⽤分层

应用分层是⼀种软件开发设计思想,它将应用程序分成N个层次,这N个层次分别负责各⾃的职责,多个层次之间协同提供完整的功能.根据项⽬的复杂度,把项⽬分成三层,四层或者更多层.常⻅的MVC设计模式,就是应⽤分层的⼀种具体体现

类似公司的组织架构

公司初创阶段,⼀个⼈⾝兼数职,既做财务,⼜做⼈事,还有⾏政.

随着公司的逐渐壮⼤,会把岗位进⾏细分,划分为财务部⻔,⼈事部⻔,⾏政部⻔等.各个部⻔内部还会 再进⾏细分.

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

但是随着后端⼈员不再涉及前端,后端开发⼜有了新的分层⽅式.

阿⾥开发⼿册中(网上可搜),关于⼯程结构部分,定义了常见工程的应⽤分层结构:

这是企业项目的分层,我们当前的项目还不需要这么规范。

🎍为什么需要应用分层

在最开始的时候,为了让项⽬快速上线,我们通常是不考虑分层的.但是随着业务越来越复杂,⼤量的代码混在⼀起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动⼀处就牵⼀发⽽动全⾝等问题.所以学习对项⽬进⾏分层就是我们程序员的必修课了

接下来就讲述我们做项目该如何分层。

🍀如何分层(三层架构)

在前面文章中提到的MVC,就是把整体的系统分成了Model(模型),View(视图)和Controller(控制器)三个层次,也就是将⽤⼾视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦,是⼀种标准的软件分层架构

⽬前现在更主流的开发⽅式是"前后端分离"的⽅式,后端开发⼯程师不再需要关注前端的实现

所以对于Java后端开发者,⼜有了⼀种新的分层架构:把整体架构分为表现层、业务逻辑层和数据层.这种分层方式也称之为"三层架构".

  1. 表现层:就是展⽰数据结果和接受用户指令的,是最靠近用户的⼀层(接收请求,响应数据);
  2. 业务逻辑层:负责处理业务逻辑,里面有复杂业务的具体实现;
  3. 数据层:负责存储和管理与应用程序相关的数据(与数据库的交互);

这三个部分,在Spring的实现中,也均有体现

  • Controller:控制层(表现层)。接收前端发送的请求,对请求进⾏处理,并响应数据。
  • Service:业务逻辑层。处理具体的业务逻辑。
  • Dao:数据访问层,也称为持久层。负责数据访问操作,包括数据的增、删、改、查

它们之间是有调用关系的,Controller调用Service,Service调用Dao;对于实体类上述几个都用可能使用到,可在model中管理。

比如以下代码我们就可以进行分层处理:

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

关于⼆者的关系,⼀直存在不同的观点.有⼈认为三层架构是MVC模式的⼀种实现,也有⼈认为MVC是三层架构的替代⽅案,等等各种说法都有.根本原因是⼤家站在不同的⻆度来看待这个问题的.

从概念上来讲,⼆者都是软件⼯程领域中的架构模式.

MVC架构模式由三部分组成,分别是:模型(Model),视图(View)和控制器(Controller).

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

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

⼆者其实是从不同⻆度对软件⼯程进⾏了抽象.

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

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

⻆度不同也就谈不上互相替代了,在⽇常的开发中可以经常看到两种共存的情况,⽐如我们设计模型层的时候往往也会拆分出业务逻辑层(Service层)和数据访问层(Dao层)。但是⼆者的⽬的是相同的,都是"解耦,分层,代码复⽤"

🌳什么是高内聚低耦合

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

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

既要高内聚又要低耦合,这两者相互矛盾吗?

不⽭盾,⾼内聚指的是⼀个模块中各个元素之间的联系的紧密程度,低耦合指的是各个模块之间的紧密程度

这就好⽐⼀个企业,包含很多部⻔,各个部⻔之间的关联关系要尽可能的⼩,⼀个部⻔发⽣问题,要尽可能对降低对其他部⻔的影响,就是耦合.但是部⻔内部员⼯关系要尽量紧密,遇到问题⼀起解决,克服.这叫做内聚.

就好比邻⾥邻居,每一个家庭就是一个模块,楼上漏⽔导致楼下遭殃,就是耦合.家庭⼀个成员⽣病,其他成员帮忙照顾,就叫内聚.⼀个家庭内部的关系越紧密越好,⼀个家庭尽可能少的影响另⼀个家庭,就是低耦合。

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

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

相关文章

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了,换个日志收集工具 Splunk 是一种 IT 工具,可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说,它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…

ES设置证书和创建用户,kibana连接es

1、启动好es 2、进入es容器 docker exec -it es /bin/bash 3、生成ca证书 ./bin/elasticsearch-certutil ca 注:两个红方框位置直接回车 4、生成cert证书 ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 注:前两个红框直接回车&am…

python + ollama 手敲实现私有大模型知识库

在不依赖 LangChain、LlamaIndex 等框架,以及各种知识问答软件的情况下,尽量减少第三方库的使用,仅通过 Ollama 和 NumPy 两个外部库来实现 RAG(Retrieval-Augmented Generation)应用。 一、安装python 下载&#xf…

TypeScript中的函数:类型安全与高级特性

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

EasyExcel使用详解

文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言 EasyExcel 是…

概率论里的特征函数,如何用卷积定理去理解

概率论里的特征函数,如何用卷积定理去理解_哔哩哔哩_bilibili

具身智能技术趋势

参考: 【北京大学-董豪】具身智能技术趋势分析 2024.8 回答了具身智能技术G3、G4的必要性,以及真实数据、仿真数据、互联网数据之间的关系 具身智能趋势 趋势:寻求一个通用路径实现所有的上肢操作 要求:① 低成本 ② 拓展到所有…

新型智慧城市解决方案-3

智慧城市概述 智慧城市是运用物联网、云计算、大数据等现代科技手段,构建集网络化、信息化、智能化于一体的新型城市模式,涵盖智慧管理、智慧产业、智慧民生等核心内容。 智慧城市建设背景 随着城镇化快速发展,城市病问题日益突出&#x…

【云安全】云原生-K8S-搭建/安装/部署

一、准备3台虚拟机 务必保证3台是同样的操作系统! 1、我这里原有1台centos7,为了节省资源和效率,打算通过“创建链接克隆”2台出来 2、克隆之前,先看一下是否存在k8s相关组件,或者docker相关组件 3、卸载原有的docker …

C++的类Class

文章目录 一、C的struct和C的类的区别二、关于OOP三、举例:一个商品类CGoods四、构造函数和析构函数1、定义一个顺序栈2、用构造和析构代替s.init(5);和s.release();3、在不同内存区域构造对象4、深拷贝和浅拷贝5、构造函数和深拷贝的简单应用6、构造函数的初始化列…

HTML<kbd>标签

例子 在文档中将一些文本定义为键盘输入&#xff1a; <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…

windows下部署安装 ELK,nginx,tomcat日志分析

1.安装包 如上就是elk- windows下部署需要用到的安装包 &#xff08;ps:注意版本需要对应&#xff0c;另外es7版本对应是 jdk8&#xff0c;若更高版本 请自行查询版本对应号&#xff09;。 下载地址&#xff1a; Past Releases of Elastic Stack Software | Elastic 此地址可…

Controller 层优化四步曲

Controller 层优化四步曲 前言 在开发过程中&#xff0c;Controller 层作为系统与外界交互的桥梁&#xff0c;承担着接收请求、解析参数、调用业务逻辑、处理异常等职责。 然而&#xff0c;随着业务复杂度的增加&#xff0c;Controller 层的代码往往会变得臃肿且难以维护。 …

CVE-2025-0411 7-zip 漏洞复现

文章目录 免责申明漏洞描述影响版本漏洞poc漏洞复现修复建议 免责申明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 此漏洞 &#xff08;CVSS SCORE 7.0&#xff09; 允许远程攻击者绕…

洛谷P1030 [NOIP2001 普及组] 求先序排列(c++)详解

题目链接&#xff1a;P1030 [NOIP2001 普及组] 求先序排列 - 洛谷 | 计算机科学教育新生态 思路&#xff1a; 1.先确定跟节点 2.根据根节点&#xff0c;划分出左右子树 中&#xff1a;BADC 后&#xff1a;BDCA 分析&#xff1a; 根据后序遍历&#xff0…

基于 PyTorch 的深度学习模型开发实战

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 深度学习已广泛应用于图像识别、自然语言处理、自动驾驶等领域&#xff0c;凭借其强大的特征学习能力&#xff0c;成为人工…

VScode+ESP-IDF搭建ESP32开发环境

VScodeESP-IDF搭建ESP32开发环境 ESP-IDF安装方式&#xff1a; 离线安装 ESP-IDF下载;VSCode插件安装ESP-IDF; 这里选择VSCode 环境 ESP-IDF 插件方式安装&#xff0c; VSCode 插件市场中搜索并安装 ESP-IDF 插件&#xff1a; 安装完成后侧边栏会多出一个 ESP-IDF 标志&…

【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff01;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全球气象站点…

(1)SpringBoot入门+彩蛋

SpringBoot 官网(中文)&#xff1a;Spring Boot 中文文档 Spring Boot是由Pivotal团队提供的一套开源框架&#xff0c;可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持&#xff0c;可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能…

PydanticAI应用实战

PydanticAI 是一个 Python Agent 框架,旨在简化使用生成式 AI 构建生产级应用程序的过程。 它由 Pydantic 团队构建,该团队也开发了 Pydantic —— 一个在许多 Python LLM 生态系统中广泛使用的验证库。PydanticAI 的目标是为生成式 AI 应用开发带来类似 FastAPI 的体验,它基…