【JavaEE进阶】 关于应用分层

news2024/11/24 14:01:31

文章目录

  • 🎋序言
  • 🍃什么是应⽤分层
  • 🎍为什么需要应⽤分层
  • 🍀如何分层(三层架构)
  • 🎄MVC和三层架构的区别和联系
  • 🌳什么是高内聚低耦合
  • ⭕总结

🎋序言

在我们进行项目开发时我们如果一股脑将所有代码都放在一个文件夹下面,或者全部写在一起。这样会显得杂乱无章,而且更加不利于管理。

类似公司的组织架构: 公司初创阶段,⼀个⼈⾝兼数职,既做财务,⼜做⼈事,还有⾏政.随着公司的逐渐壮⼤,会把岗位进⾏细分,划分为财务部⻔,⼈事部⻔,⾏政部⻔等.各个部⻔内部还会再进⾏细分.

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

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

比如在阿里开发⼿册中,关于⼯程结构部分,定义了常⻅⼯程的应⽤分层结构:
在这里插入图片描述

🍃什么是应⽤分层

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

🎍为什么需要应⽤分层

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

🍀如何分层(三层架构)

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

在这里插入图片描述

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

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

  1. 表现层:就是展⽰数据结果和接受⽤⼾指令的,是最靠近⽤⼾的⼀层;

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

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

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

在这里插入图片描述

按照上⾯的层次划分,Spring MVC站在后端开发⼈员的⻆度上,也进⾏了⽀持,把上⾯的代码划分为三个部分:

  • 请求处理、响应数据:负责,接收⻚⾯的请求,给⻚⾯响应数据.

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

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

这三个部分,在Spring的实现中,也均有体现
在这里插入图片描述

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

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

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

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

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

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

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

三层架构将业务应⽤划分为:表现层,业务逻辑层,数据访问层.
在这里插入图片描述
MVC中,视图和控制器合起来对应三层架构中的表现层.模型对应三层架构中的业务逻辑层,数据层,以及实体类

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

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

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

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

🌳什么是高内聚低耦合

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

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

在这里插入图片描述

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

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

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

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

⭕总结

关于《【JavaEE进阶】 关于应用分层》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

零售EDI:Babylist EDI 项目案例

Babylist 与各种不同的品牌和零售商合作,包括婴儿用品、玩具、衣物和其他相关产品的制造商。用户可以在 Babylist 上浏览各种不同的产品,并根据自己的需求和喜好选择适合的项目。本文将为大家介绍对接Babylist 的EDI项目案例。 Babylist EDI 需求 传输协…

升级8.0:民生手机银行的“内容解法”

数字化浪潮,滚滚来袭。 随着数字中国建设的持续推进,数字经济正在蓬勃发展。中商产业研究院分析师预测,2023年中国数字经济市场规模将增长至56.7万亿元,占GDP的比重将达到43.5%。 在此浪潮下,数字化的触角蔓延到各行…

[C++] opencv - copyTo函数介绍和使用案例

copyTo函数介绍 copyTo函数是OpenCV库中的一个成员函数,用于将一个Mat对象的内容复制到另一个Mat对象中。 函数原型: void cv::Mat::copyTo(OutputArray m) const;void cv::Mat::copyTo(OutputArray m, InputArray mask) const; 参数说明:…

指向未来: 量子纠缠的本质是一个指针

指向未来: 量子纠缠的本质是一个指针 概述基本概念理解量子纠缠PythonJavaC 理解波粒二象性PythonJavaC 理解量子隧穿理解宇宙常量PythonJavaC 概述 量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也…

oracle11g的闪回技术-闪回表-时间戳

--数据库闪回表 --1创建表(登录模式system) CREATE table dept2 as select * from dept;--此语句如果加上where条件可用于工作中数据的临时备份 select * from dept2;--查询新建表信息 --进入sql>set time on 通过时间点闪回 记录弹出的时间点&#…

2024年linux内核开发会是程序员新的风口吗?

前言 众所周知,linux操作系统一直靠着稳定,安全,开源等优势占据着80%以上的服务器市场。小至私人企业,大至世界百强,都离不开它的身影。以至于无论你擅长的是哪门语言,面试的时候都会或多或少的涉及linux的…

物联网网关与plc怎么连接?

物联网网关与plc怎么连接? 物联网是当今社会中最热门的技术之一,而物联网网关则是连接物联网设备与云平台的核心设备之一。物联网网关在连接各种传感器和设备时起着至关重要的作用。而另一种广泛应用于工业控制和自动化领域的设备是可编程逻辑控制器&…

上海亚商投顾:沪指探底回升 大金融板块午后走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 指昨日探底回升,深成指、创业板指午后跌超1%,尾盘集体拉升翻红,北证50指数涨…

你知道怎么做好接口测试?

前言 谈起软件测试,就不得不说一下接口测试,凡是有功能的软件都离不开接口,没有接口的软件只是一个模具或页面,不具备任何功能。 什么是接口 业内常说的接口一般指两种: API:应用程序编程接口&#xff0c…

【unity】麦克风声音驱动,控制身体做出不同动作

1.在角色对象上挂在animator组件,并将动作控制器与其关联 2.在角色对象上挂在audio source组件。 3.新建voice control脚本,编写代码如下: using System; using System.Collections; using System.Collections.Generic; using UnityEngine;…

vue2 使用vuex状态管理工具 如何配置与搭建。

等我研究研究,下一期给大家出一个后台管理左侧侧边栏如何搭建的。 首先我们先下载一下 vuex包 yarn add vuex3 1.先导入我们需要的 Vue 和 vuex 2.注册vuex 3.创建vuex实例 4.导出store export default store 5.在main.js中导入并挂载到全局。 Vuex如何实…

C++编写、生成、调用so库详解(二)

我们上篇中主要讲了怎么去打包so库 C编写、生成、调用so库详解(一) 这篇我们就来说一些怎么调用so库 目录 1.调用符合JNI标准的so库 2.调用不符合JNI标准的so库 上面说了两种不同类型的so库,我们分别来看一下怎么调用这两种,在调用so库之前,我们先说一下直接调用上面写的C…

全球网络是如何互联的?

1.Internet 在之前的学习中我们知道了Internet和internet的区别,也知道了Internet目前是全球最大的网络,并且由很多规模不同的网络互联而成。到目前已经有超过90个国家接入了Internet,主机超过400万台,可以说Internet是全人类的信…

【Ubuntu18.04安装Labelme】

Ubuntu18.04安装Labelme 1 安装Anaconda并创建conda环境2 安装依赖3 安装Labelme4 安装验证 1 安装Anaconda并创建conda环境 Anaconda3安装教程:https://blog.csdn.net/dally2/article/details/108206234 "ctrlaltt"快捷键打开终端,创建conda…

gateway Redisson接口级别限流解决方案

文章目录 前言1. 计数器算法(固定窗口限流器)2. 滑动窗口日志限流器3. 漏桶算法(Leaky Bucket)4. 令牌桶算法(Token Bucket)5. 限流队列应用场景实现工具 一、Redisson简介二、Redisson限流器的原理三、Red…

利用 ChatGPT 高效搜索:举一反三的思考方式,高效查找解决方案

文章目录 基础思路举一反三基于我的已知推荐 Web 框架系统方案建议 - 让 ChatGPT 推断我的一些微末思考结论 本文只是我的一些尝试,基于 ChatGPT 实现系统化快速搜索某编程语言的特定领域相关包或者基于其他语言类推荐落地方案的尝试。 这篇文章中描述的方式不一定…

ABAP IDOC 2 XML

有个需求,外围系统希望我们给到一个IDOC 记录的样例,但是我们we02中并无法看到 就找了一个demo去直接展示IDOC内容 *&---------------------------------------------------------------------* *& Report Z_IDOC_TO_XML *&------------…

关于前端或者postman传递Date数据测试接口报错

错误: org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String\r\n### Cause: java.lang.IllegalArgumentException: invali…

服务器运维小技巧(一)——如何进行远程协助

服务器运维中经常会遇到一些疑难问题,需要安全工程师,或者其他大神远程协助。很多人会选择使用todesk或者向日葵等一些远控软件。但使用这些软件会存在诸多问题: 双方都需要安装软件,太麻烦需要把服务器的公钥/密码交给对方不知道…

Android WorkManager入门(二)

WorkManager入门 上一篇前言创建 WorkRequest并提交 定时的任务(PeriodicWorkRequest)配合约束使用定义执行范围失败后的重试为WorkRequest打上TAG其他取消方法 传参和返回参数总结参考资料 上一篇 Android WorkManager入门(一) …