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

应用分层、三层架构和MVC架构

前言

在前面中,我们已经学习了Spring MVC 的一些基础操作,那么后面就用一些简单的案例来巩固一下。

在开始学习做案例之前,我们先来了解一下在软件开发中常见的设计模式和架构。

应用分层

含义

应用分层是一种软件开发设计思想,将应用程序分成N个层次,每个层次各司其职,多个层次之间协同提供完整的功能。根据项目的复杂度,可以把项目分为三层、四层或者更多层。

我们前面学习的MVC设计模式,就是应用分层的一种具体体现

为什么需要应用分层?

在早期项目开发的过程中,为了让项目快速上线,我们通常是不考虑分层的,但是随着业务越来越复杂,大量的代码堆积在一起,会出现逻辑不清晰、各模块相互依赖、可维护性、扩展性差,改动一处就可能牵动所有的问题。所以为了解决这些问题,我们就需要学习应用分层。

如何分层(三层架构)?

我们前面学习的MVC架构设计模式,是一种标准的软件分层架构,把整体的系统划分成了三个模块:View(视图)、Controller(控制器)、Model(模块),也就是将用户视图和业务处理隔离开,并通过控制器来连接视图和模块,实现了表现和逻辑的解耦。

但其实现在我们更主流的开发方式是:前后端分离

后端不需要关注前端是如何实现的,只需要提供对应的接口即可,所以,对于我们java后端开发者,又多了一种新的分层架构:三层架构。 

三层架构

整体架构分成表现层、业务逻辑层和数据层,这种分层方式称为“三层架构”。

每层功能
  1. 表现层负责展示数据结果和接收用户指令,是最接近用户的一层(负责接收页面的请求,给页面响应数据);
  2. 业务逻辑层负责处理业务逻辑,里面负责业务逻辑的具体实现(负责业务逻辑处理的代码);
  3. 数据层负责存储和管理与应用程序相关的数据(负责业务数据的维护操作,如CRUD)。

三层架构其实在Spring中也有实现:

  1. 控制层(Controller):负责结构前端发送的请求,对请求进行处理,并返回响应;
  2. 业务逻辑层(Service):负责具体的业务处理逻辑。
  3. 数据访问层(Dao):也称为持久层。负责数据访问操作,包括数据的CRUD。

MVC和三层架构区别和联系

区别

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

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

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

联系

  • MVC和三层架构都是两种常见的软件设计模式和架构风格。
  • 二者都是从不同角度对软件工程进行抽象。
  • MVC强调将数据和视图分离,将数据展示和结果处理分开,通过控制器来对二者进行交互。
  • 三层架构强调不同维度数据处理的高内聚、低耦合,将交互界面,业务处理和数据库操作的逻辑分开。二者强调的角度不同,也就谈不上互相替代了。但在日常开发中我们经常可以看到二者并存,比如,模型层(Model)我们会拆分出业务逻辑层(Service)和数据访问层(Dao)
  • 二者目的都是“解耦、分层、代码复用”。

什么是高内聚低耦合?

高内聚低耦合是一种软件设计原则

高内聚指一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,说明内聚性越高,即“高内聚”。

低耦合指的是软件中各个层、模块之间的依赖关系程度越低越好。修改一处,对其他模块的改动越少越好。

高内聚低耦合矛盾吗?

不矛盾,高内聚指的是一个模块红各个元素之间的联系的紧密程度,低耦合指的是各个模块之间的紧密程度。这就好比一个大家庭,包含着很多小家庭,小家庭内的人平时都是在一起生活,联系的紧密程度高(高内聚)各个小家庭之间的联系的紧密程度就比较低(低耦合)。如果有一个小家庭中某个成员出现状况,对于其他小家庭来说,并没有多大的影响,这就是低耦合;但如果两个小家庭中的成员发生矛盾,这就是耦合。

在后续的案例中,我们将使用三层架构来对案例进行分层。


以上就是本篇的所有内容~

若有不足,欢迎指正~

相关文章:

应用分层、三层架构和MVC架构

前言 在前面中,我们已经学习了Spring MVC 的一些基础操作,那么后面就用一些简单的案例来巩固一下。 在开始学习做案例之前,我们先来了解一下在软件开发中常见的设计模式和架构。 应用分层 含义 应用分层是一种软件开发设计思想&#xff0…...

Apache Struts2 - 任意文件上传漏洞 - CVE-2024-53677

0x01:漏洞简介 Apache Struts 是美国 Apache 基金会的一个开源项目,是一套用于创建企业级 Java Web 应用的开源 MVC 框架(将软件分为模型(Model)、视图(View)和控制器(Controller&a…...

传统混合专家模型MoE架构详解以及python示例(DeepSeek-V3之基础)

我们已经了解到DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。而DeepSeekMoE架构的底层模型采用了混合专家模型(Mixture of Experts,MoE)架构。所以我们先了解一下传统混合专家模型MoE架构。 一、传统混合专家模…...

Tomcat如何处理Http请求

Tomcat处理HTTP请求的流程是一个复杂但有序的过程,涉及多个组件的协同工作。以下是对Tomcat处理HTTP请求流程的详细讲解: 一、接收请求 监听端口:Tomcat通过配置的Connector组件监听特定的端口(默认是8080)&#xff…...

安全筑基,智能赋能:BeeWorks IM引领企业协同新纪元

在数字经济高速发展的今天,企业通讯系统已从单纯的信息传递工具演变为支撑业务创新的核心平台。传统通讯工具在安全性、智能化、协同性等方面的不足,严重制约着企业的数字化转型进程。BeeWorks IM系统以其创新的技术架构和智能化功能,正在重新…...

AlmaLinux使用Ansible自动部署k8s集群

一、环境准备 节点规划(最低要求) 1台Master节点(4核/8GB内存)2台Worker节点(2核/4GB内存)1台Ansible控制机(可复用Master节点) 系统配置 # 所有节点执行 sudo hostnamectl set-hos…...

solidworks零件的绘制学习

1、拉伸凸台拉伸切除可以在一个零件中打孔,如下图: 2、旋转凸台配合旋转切除; 3、薄壁特征:在拉伸凸台,旋转凸台中都有;在一个面中画完草图,然后选择拉伸凸台或旋转凸台,里面就会出…...

DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)

一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…...

llama.cpp部署 DeepSeek-R1 模型

一、llama.cpp 介绍 使用纯 C/C推理 Meta 的LLaMA模型(及其他模型)。主要目标llama.cpp是在各种硬件(本地和云端)上以最少的设置和最先进的性能实现 LLM 推理。纯 C/C 实现,无任何依赖项Apple 芯片是一流的——通过 A…...

Spring源码分析のBean创建流程(上)

文章目录 前言一、preInstantiateSingletons1.1、getMergedLocalBeanDefinition1.2、isFactoryBean 二、getBean 前言 原生Spring在refresh方法中,会在finishBeanFactoryInitialization:preInstantiateSingletons方法中直接创建所有非懒加载的单例Bean。…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数

定义在 src\core\ngx_times.c 中 ngx_time_init 函数后面 void ngx_time_update(void) {u_char *p0, *p1, *p2, *p3, *p4;ngx_tm_t tm, gmt;time_t sec;ngx_uint_t msec;ngx_time_t *tp;struct timeval tv;if (!ngx_trylock(&ngx…...

DeepSeek笔记(二):DeepSeek局域网访问

如果有多台电脑,可以通过远程访问,实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中,首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11,…...

基于大数据的全国热门旅游景点数据分析系统的设计与实现

【大数据】基于大数据的全国热门旅游景点数据分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统主要包括登录注册、系统首页、图表分析、数据管理和个人信息五大功能模…...

【Unity3D】Jenkins Pipeline流水线自动构建Apk

目录 一、准备阶段 二、创建Pipeline流水线项目 三、注意事项 四、扩展 1、Pipeline添加SVN更新项目Stage阶段 一、准备阶段 1、安装tomcat 10.0.5 Index of apache-local/tomcat/tomcat-10 2、安装jdk 17 Java Archive Downloads - Java SE 17.0.13 and later 3、…...

10G EPON光模块

一、10G EPON对称光模块 工作模式:上行突发接收、下行连续发射。 工作原理:当需要发送信号时,系统信号通过光模块的电接口把信号传送到驱动芯片,芯片处理后,驱动激光器发出调制光信号,经光纤发到远端&…...

Edge浏览器翻译|自动翻译设置

文章目录 Edge浏览器翻译|自动翻译设置右键翻译显示原文 Edge浏览器翻译|自动翻译设置 在 Microsoft Edge 浏览器中使用 Microsoft Translator - Microsoft 支持 进入浏览器设置,从首选语言列表中移除多余的语言设置 网站将以受支持语言列表中的第一种语言进行显示。若要重新…...

基于微信小程序的场地预约设计与实现

第3章 系统设计 3.1系统设计目标 本系统的实现可以帮助体育馆场地信息的管理。帮助管理员对注册用户管理以及用户预约管理。同时可以帮助用户进行场地预约。本系统可以实现用户足不出户预约到需要的场地,为用户提供场地信息了解的平台。 3.2系统功能结构图 本系统的…...

腾讯发布混元-3D 2.0: 首个开源高质3D-DiT生成大模型

在之前的文章中已经和大家介绍过腾讯HunYuan-3D 1.0,感兴趣的小伙伴可以点击下面链接阅读~ HunYuan-3D 是首个开源高质3D-DiT生成大模型,几何与纹理解藕生成,一键将创意具象化。 2.0模型架构图及介绍 2.0模型将几何和纹理生成解耦&#xff0…...

计算机性能与网络体系结构探讨 —— 基于《计算机网络》谢希仁第八版

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮&#xff0…...

C# 控制台相关 API 与随机数API

C# 控制台相关 API 与随机数API 控制台输入输出 功能说明 Console.WriteLine(string): 输出字符串并换行Console.Write(string, string): 输出字符串不换行Console.ReadLine(): 等待用户输入并返回字符串Console.ReadKey(bool).KeyChar: 读取按键,指定是否显示输…...

Git的常用命令及常见问题处理方法

目录 一、介绍二、常用 Git 命令1. 配置用户信息2. 初始化仓库3. 克隆远程仓库4. 查看状态5. 添加文件到暂存区6. 提交更改7. 查看提交历史8. 查看文件差异9. 查看分支10. 切换分支11. 合并分支12. 处理冲突13. 远程操作14. 标签管理15. 撤销操作 三、常见问题处理方法1. 无法推…...

基于vue3实现的课堂点名程序

设计思路 采用vue3实现的课堂点名程序&#xff0c;模拟课堂座位布局&#xff0c;点击开始点名按钮后&#xff0c;一朵鲜花在座位间传递&#xff0c;直到点击结束点名按钮&#xff0c;鲜花停留的座位被点名。 课堂点名 座位组件 seat.vue <script setup>//组合式APIimpo…...

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 kkFileView二开系列文章&#xff1a;1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 kkFileView二开系列文章&#x…...

神经网络常见激活函数 9-CELU函数

文章目录 CELU函数导函数函数和导函数图像优缺点pytorch中的CELU函数tensorflow 中的CELU函数 CELU 连续可微指数线性单元&#xff1a;CELU&#xff08;Continuously Differentiable Exponential Linear Unit&#xff09;,是一种连续可导的激活函数&#xff0c;结合了 ELU 和 …...

什么是网关?网关有什么作用?API网关的主要功能,SpringCloud可以选择有哪些API网关?什么是限流算法?网关如何实现限流?一篇文章读懂网关的前世今生

1、什么是网关&#xff1f; API网关&#xff08;API Gateway&#xff09;是一种中间层服务器&#xff0c;用于集中管理&#xff0c;保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点&#xff0c;提供了一组统一的接口管理和控制API的访问。 2、网关示意图 3…...

OpenCV机器学习(1)人工神经网络 - 多层感知器类cv::ml::ANN_MLP

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::ANN_MLP 是 OpenCV 库中的一部分&#xff0c;用于实现人工神经网络 - 多层感知器&#xff08;Artificial Neural Network - Multi-Layer…...

DeepSeek告别服务器繁忙

原文地址&#xff1a;http://shen.iwiki.fun/2025/02/09/free-deepseek/ 博客地址&#xff1a;http://shen.iwiki.fun 一、申请API 1、硅基流动 免费额度&#xff1a;14元 注&#xff1a;平台 2000 万 Tokens 特指 Qwen2.5-14B-Instruct 模型单价下的数量&#xff0c;实际到账…...

线性代数中的正交和标准正交向量

在线性代数中&#xff0c;理解正交向量和正交向量至关重要&#xff0c;尤其是对于机器学习中的应用。这篇博文将简化这些概念&#xff0c;而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零&#xff0c;则认为这两个向量是正交的。但点积到底是什么呢&am…...

从安装软件到flask框架搭建可视化大屏(一)——创建一个flask页面,零基础也可以学会

1.第一步&#xff1a;安装软件 Flask是一个轻量级Web应用框架&#xff0c;用python代码编写&#xff0c;简单方便应用。 如何安装pycharm_pycharm只能安装在c盘吗-CSDN博客 Pycharm分为专业版和社区版&#xff0c;是python的主流工具 如何安装Anaconda_如何安装anacoda csdn-…...

python opencv基础使用总结

1.安装opencv库&#xff1a;pip install opencv-python 2.基础使用范例 import cv2 #图片的基本操作#1.读取一张图片 参数 1&#xff1a;图片的文件名如果图片放在当前文件夹下&#xff0c;直接写文件名就行&#xff0c;如lena.jpg否则需要给出绝对路径&#xff0c;如D:\Ope…...