我敢打赌,这个架构你一定知道!

大家好,我是鱼皮。开发后端项目时,我们最常见的一种架构模式就是 分层架构

所谓的分层架构,就是把系统自上而下分为多个不同的层,每一层都有特定的功能和职责,且只和自己的直接上层与直接下层 “打交道”。

分层架构的优点是:每一层都有明确定义的职责,易于理解和维护;而且各层可以独立扩展,以适应不同的需求。

所以分层架构也是最适合新手入门学习、并且实际开发中应用最多的架构。

分层架构

下面给大家一种 Java 企业级后端项目开发时常用的分层架构,一般从前端界面(表示层)发送的请求出发,需要经历接入层、控制层、业务逻辑层、通用业务层、数据访问层、系统资源层等。

表示层 通常是指让用户交互和查看信息的前端界面,比如用户点击按钮后能够发送一个请求,也可以叫用户层、界面层等。

发送请求后,会经过 接入层 ,比如 Nginx 网关、或者其他中间件,对请求做一个预处理或转发,比如实现负载均衡。这一层不是必须存在的,通常更适用于中大型项目,前端也可以直接请求后端。

接入层会将请求转发到 控制层(Controller),负责接受请求、调用业务逻辑层(Service)的代码实现功能、然后响应结果。控制层一般不建议写复杂的业务逻辑,尽量保持精简。

接下来是 业务逻辑层(Service),负责处理复杂的业务逻辑,比如对请求数据进行校验、处理、调用数据访问层以将结果存到数据库中等,也是我们做系统时主要开发编码的部分。

通用业务层(Manager、Module)是一种特殊的业务逻辑层,主要的作用是抽取了一些需要被多个业务调用的公共代码,比如上传文件到对象存储、鉴权等,从而实现复用。

数据访问层(Dao / Mapper)负责操作底层的数据源,比如对数据库、文件、缓存等进行增删改查。

最后是 系统资源层 ,也可以叫基础设施层,包括各种基础服务、系统环境等,比如数据库、消息队列、Redis、文件存储、Linux 系统、Docker 等。复杂的基础设施可能还包括 K8S 容器资源编排、资源调度平台等。


需要注意的是,并不是所有的分层架构都需要这么划分,不同业务和团队可能有自己的分层选择与规范。

比如我带大家开发的 OJ 在线判题系统 ,分层架构如下:

示例项目结构

基于分层架构,我们可以将项目按照特定的目录名(包名)来组织代码,比如:

  • controller:控制层
  • service:业务逻辑层
  • mapper:数据访问层
  • model:数据模型

还可以按照业务或文件的类型来划分目录,比如:

  • constant:常量
  • annotation:注解类
  • common:公共类
  • config:配置类
  • job:任务
  • exception:异常处理相关
  • utils:工具类

以之前带大家做过的 寻爱网项目 为例,项目的目录结构如图:

其他知识

1)计算机网络也是采用了经典的分层架构,OSI 七层参考模型中,把计算机网络自底向上分为了物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每个层只处理特定的功能,比如数据传输、数据的路由;层与层之间通过接口(或者叫协议)进行通信。

2)需要注意的是,我们常用的后端开发框架 Spring MVC 是基于 MVC(Model-View-Controller)设计模式构建的,而不能算是传统的分层架构。而且一般现在的项目中只使用 Spring MVC 作为整个项目的控制层,不过大多数用了 Spring MVC 框架的项目基本都使用了分层架构。

实践

想了解更多常见的后端架构设计,推荐阅读这篇文章:架构设计,让网站支棱起来!

编程导航星球的所有后端项目基本都使用了经典分层架构,随便实践一个项目都能学会这种架构方式。

👉🏻 编程导航原创项目教程系列:https://yuyuanweb.feishu.cn/wiki/SePYwTc9tipQiCktw7Uc7kujnCd

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

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

相关文章

MySQL 数据库表格创建、数据插入及获取插入的 ID:Python 教程

创建表格 要在MySQL中创建表格,请使用"CREATE TABLE"语句。 确保在创建连接时定义了数据库的名称。 示例创建一个名为 “customers” 的表格: import mysql.connectormydb mysql.connector.connect(host"localhost",user"…

LDR6023AQ-PDHUB最简外围成本低搂到底就是干

USB-C PD协议里,SRC和SNK双方之间通过CC通信来协商请求确定充电功率及数据传输速率。当个设备需要充电时,它会发送消息去给适配器请求充电,此时充电器会回应设备的请求,并告知其可提供的档位功率,设备端会根据适配器端…

Java集合面试题

常见的java集合? 主要分为三类,List Map Set 列表 映射 集 集合相关的接口都在 java.util中 java集合的主要关系 List 特性: 存储的元素有序,可重复 Set 特性:存储的元素无序,不可重复 Map 特性…

【Proteus仿真】【51单片机】汽车尾灯控制设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用按键、LED模块等。 主要功能: 系统运行后,系统运行后,系统开始运行,K1键控制左转向灯;…

外贸企业GMS认证|SD-WAN专线解决方案支持 IPv6、IPv4

IP地址是英文internet protocol的缩写,是网络之间互连的协议。互联网诞生后,很长一段时间都是使用v4版本的IP协议,也就是 IPv4 ,目前全球使用互联网的人数达到了48.8亿,而IPv4的地址库总共约43亿个地址,每个…

相同的树(C++解法)

题目 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p [1,2,3], q [1,2,3] 输出:true示例 …

结构体内存对齐(三板斧解决结构体的大小)

文章目录 前言一、结构体对齐规则二、结构体大小计算 - 三板斧一板斧二板斧三板斧 三、为什么存在内存对齐?四、修改默认对齐数 前言 我们知道,整型变量有自己的大小,浮点型变量有自己的大小,数组也有自己的大小,只要…

linux下搭建gperftools工具分析程序瓶颈

1. 先安装 unwind //使用root wget https://github.com/libunwind/libunwind/archive/v0.99.tar.gz tar -xvf v0.99.tar.gz cd libunwind-0.99 autoreconf --force -v --install ./configure make sudo make install2. 安装gperftools wget https://github.com/gp…

操作系统第一次实验——短作业优先调度算法(SJF)

一、实验目的: 目的:了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 任务:模拟实现先来先服务或者短作业优先调度算法。 二、实验内容: 1、实验内容 模拟实现SJF调度。 设置作业体:作业名&#x…

关于mac下pycharm旧版本没删除的情况下新版本2023安装之后闪退

先说结论,我用的app cleaner 重新删除的pycharm ,再重新安装即可。在此记录一下 之前安装的旧版的2020的pycharm,因为装不了新的插件,没办法就升级了。新装2023打开之后闪退,重启系统也不行,怀疑是一起破解…

类图复习:类图简单介绍

入职新公司在看新项目的代码,所以借助类图梳理各个类之间的关系,奈何知识已经还给了老师,不得不重新学习下类图的相关知识,此处将相关内容记录下方便后续使用。 文章目录 类图语法类与类的关系画类图 类图语法 语法描述public-pr…

C语言--typedef的使用

前言 在C语言中使用结构体时必须加上struct这个关键字,那有没有办法省略这个呢?要想达到这个目的就 需要用到关键字typedef,顾名思义”类型定义”。 typedef 数据类型 新的别名; 它是用来操作数据类型。其主要作用有两个: 1.给一个较长较复杂的类型取一个简单的别名。 2.给类…

MySQL其他集群类型介绍

常用的/常见的Mysql集群方案 1.MySQL Replication2.MySQL Fabric3.MySQL NDB Cluster4.MGR(MySQL Group Replication)5.心跳检测SAN共享存储(heartbeat SAN)6.心跳检测DRBD磁盘复制(heartbeat DRBD)7.MMM…

大桌子想传大文件

受高手指导说服务器想传大点的文件,得把两个地方改改 先是这里 然后这里也要改 哦。对了,改完之后要重启服务器。别忘了。

网络爬虫代理ip有什么好处?爬虫工作使用代理IP有哪些优势?

在爬虫工作中,使用代理IP有很多好处,可以帮助爬虫程序更加高效地完成任务。以下是使用代理IP的几个优势: 1. 增加匿名性 使用代理IP可以隐藏爬虫程序的真正IP地址,增加匿名性,避免被目标网站封禁。通过代理IP&#xff…

【ElasticSearch系列-07】ES的开发场景和索引分片的设置及优化

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【三】ElasticSearch的高级查询Quer…

高德地图 web js端 出现 INVALID_USER_SCODE 10008 MD5安全码未通过验证

图片意思就是在引入 高德js和css 链接前 引入 <script type"text/javascript">window._AMapSecurityConfig {securityJsCode:您申请的安全密钥,} </script> 到这里就完美结束了

【JavaEE初阶】 TCP三次握手四次挥手(超详细版)

文章目录 &#x1f334;三次握手四次挥手总览&#x1f6eb;三次握手&#xff08;建立连接&#xff09;&#x1f6a9;为什么要三次握手&#x1f4cc;解决彼此双发彼此认同的问题&#x1f4cc;验证双方的接听发送能力是否正常 &#x1f6a9;建立连接阶段涉及到的两个重要状态: &a…

blender动画制作软件拓扑全流程

拓扑在三维动画制作中至关重要&#xff0c;原因如下&#xff1a; 1. 动画变形&#xff1a; 自然形变&#xff1a; 良好的拓扑结构能够支持角色或物体在动画中的自然形变&#xff0c;例如关节弯曲、肌肉收缩等。流畅运动&#xff1a; 适当的拓扑有助于保持模型表面的平滑性&…

Linux友人帐之网络编程基础FTP服务器

一、概述 1.1FTP基本概念 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于文件传输的标准协议。FTP服务是一种能够让用户通过FTP协议在本地计算机和远程服务器之间进行文件传输的服务。FTP服务可以允许用户上传或下载文件&#xff0c;也可以进行目录浏览、文件删…