应用分层简介

一、什么是应用分层

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

常见的MCV设计模式,就是应用分层的一种具体体现。

二、为什么要分层

当项目过于复杂时,大量代码混杂在一起,会出现逻辑不清,各模块相互依赖,代码扩展性差,修改时很容易改一处而动全身等情况,所以引入程序分层是很有必要的。

三、如何分层(以三层架构为例)

MVC将整体分为了Model(模型),View(视图),Controller(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦合,是一种标准的软件分层架构。

目前更主流的开发方式是“前后端分离”的方式,后端开发师不必关注前端的实现,所以对于后端开发来说,又有了一种新的分层架构:将整体架构分为表现层、业务逻辑层、数据层。

1.表现层/控制层(Controller):展示数据结果和接受用户指令并返回响应,是最靠近用户的一层。

2.业务逻辑层(Service):负责处理业务逻辑,里面有复杂业务的具体实现。

3.数据层/数据访问层(Dao):负责存储和管理与应用程序相关的数据。

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

关于二者关系,说法不一,但是从概念上来说,二者都是软件工程领域中的架构模式,MVC由三部分构成:模型(Model)、视图(View)、控制器(Controller),三层架构将业务应用分为表现层,业务逻辑层,数据访问层。

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

二者只是从不同角度对软件工程进行了抽象。

MVC强调视图和数据的分离,将数据展示和数据处理分开,通过控制器对二者进行结合。

三层架构强调不同维度数据处理的高内聚和低耦合,将交互页面、业务处理和数据库操作的逻辑分开。

但是二者的目的都是相同的:“解耦,分层,代码复用”。

四、应用分层的好处

1.降低层与层之间的依赖,结构更加的明确,利于各层逻辑的复用。

2.开发人员可以只关注整个结构的其中的某一层,降低了维护成本和维护时间。

3.可以较为容易的使用新的实现来替换原有层次的实现。

4.有利于标准化。

五、企业规范

1.类名使用大驼峰命名方式,但这些情况除外:DO/BO/DTO/AO

2.方法名、参数名、成员变量、局部变量统一使用小驼峰命名方式。

3.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词。

六、一些学习Web开发的注解

1.@RequestMapping:路由映射。

2.@RequestParam:后端参数重命名。

3.@RequestBody:接受JSON类型的参数。

4.@PathVariable:接收路径参数。

5.@ResponseBody:返回数据。

6.@CookieValue:从Cookie中获取值。

7.@SessionAttribute:从Session中获取数据。

8.@RequestHeader:从Header中获取数据。

9.@Controller:定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理,默认返回视图。

10.@RequestPart:上传文件。

11.@RestController:等于@ResponseBody+@Controller返回数据。

Cookie和Session区分:

Cookie和Session都是会话机制,Cookie是客户端机制,Session是服务端机制,二者通过SessionId来关联,SpringMVC中内置HttpServletRequest,HttpServletResponse两个对象,需要使用时,直接在方法中添加对应的参数即可,Cookie和Session可以从HttpServletRequest中来获取,也可以使用HttpServletResponse设置Http响应状态码。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

conda的基本使用及pycharm里设置conda环境

创建conda环境 conda create --name your_env_name python3.8 把your_env_name换成实际的conda环境名称,python后边的根据自己的需要,选择python的版本。 激活conda环境 conda activate your_env_name 安装相关的包、库 conda install package_name …

E902基于bash与VCS的仿真环境建立

网上看见很多E902仿真的文章,但用到的编译器是类似于这种Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120,而我按照相应的步骤与对应的编译器,仿真总会报错。后面将编译器换成riscv64-elf-x86_64-20210512,反而成功了。现在开…

PostgreSQL:简介与安装部署

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

Git使用和原理(3)

1.远程操作 1.1分布式版本控制系统 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!什么意思呢&a…

ssm框架之mybatis框架讲解

1,Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2…

方法之笔,驭繁于简.绘场景之魂——方法论引领支撑透明化项目之航

关注作者 项目建设中痛难点剖析: 01 项目策划有缺失,目标风险难管控 ①目标设定不合理,由于项目移交交底不充分,造成项目建设目标与前期立项论证偏差过大,达不到建设预期; ②风险评估不足,未…

【Apache Storm】

一、Storm简介 1、概述 官网地址:https://storm.apache.org/index.html Apache Storm 是一个开源的、分布式的实时计算系统,专为处理流式数据而设计。它能够处理大量数据流并在极低的延迟下提供实时的结果。相比于传统的批处理系统,Storm 具…

【力扣刷题实战】无重复的最长字串

大家好,我是小卡皮巴拉 文章目录 目录 力扣题目: 无重复的最长字串 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页&#x…

联想扬天M590台式机开机卡LOGO不引导故障维修案例分享

故障描述: 用户送修联想扬天M590台式机到站端维修,说是开机不能正常进系统;站端检测开机后卡LOGO、无法加载引导系统; 故障检修: 插拔内存、插拔硬盘,更换内存、更换硬盘均不能解决此故障;调试…

C++刷题(三):string

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

PosterRender 实现微信下程序 分享商品生成海报

PosterRender 是什么 PosterRender 是一种专注于生成高质量海报图像的技术或工具,常用于生成静态图片,特别是适合用于营销、宣传和展示的图形设计。它通常用于在服务端或客户端渲染复杂的图像,包括文字、图形、图标、背景等,生成…

Spring Cloud Stream - 构建高可靠消息驱动与事件溯源架构

一、引言 在分布式系统中,传统的 REST 调用模式往往导致耦合,难以满足高并发和异步解耦的需求。消息驱动架构(EDA, Event-Driven Architecture)通过异步通信、事件溯源等模式,提高了系统的扩展性与可观测性。 作为 S…

Houdini制作非均匀细分的柱体

近期看见一非均匀细分的做法,觉得不错将其拆开以笔记分享。效果如下: 1.创建Geometry节点,并在该节点内部创建line节点样条线,设置合适长度并添加resample节点。 2.此时若无法看见顶点与顶点编号显示,可按快捷键D&am…

C# Unity 唐老狮 No.10 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho C# 1. 内存中,堆和…

Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面

首先认识一下 BODY_ATTRS 他可以在页面单独设置 head () {return {bodyAttrs: {form: form-body}};},设置完效果是只有这个页面会加上 接下来在APP.vue中添加样式

拥抱健康养生,开启活力生活

在快节奏的现代社会,健康养生不再是一句口号,而是我们对高品质生活的追求。它贯穿于日常的点点滴滴,对我们的身心状态有着深远影响。 饮食养生是基础。秉持均衡原则,每日的餐盘应是色彩斑斓的。新鲜蔬菜富含维生素与膳食纤维&…

Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式

目录 COUNTIF和COUNTIFS函数COUNTIF函数COUNTIFS函数SUMIF和SUMIFS函数SUMIF函数SUMIFS函数SUMIFS函数与控件实现动态年月汇总ROUND、ROUNDUP、ROUNDDOWN函数单元格混合引用条件格式与公式,标记整行数据MATCH和INDEX函数COUNTIF和COUNTIFS函数 COUNTIF函数 统计下“苏州”出现…

深入了解Linux —— git三板斧

版本控制器git 为了我们方便管理不同版本的文件,就有了版本控制器; 所谓的版本控制器,就是能够了解到一个文件的历史记录(修改记录);简单来说就是记录每一次的改动和版本迭代的一个管理系统,同…

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中,笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中,笔记本电脑突然关不了机了,怎么回事?下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法,有需要的可以来看看。 一、…

Unity打包的WebGL包打不开问题解决方案,以及WebGL包嵌入至Vue2中的步骤

问题描述 在做项目时,需要将Unity做出的场景与Vue2结合,遇到了一些问题,在网上搜了很多解决方案,最终根据下面这篇博客的内容成功解决。解决方案 https://blog.csdn.net/m0_56308072/article/details/135502566注意事项 &#xff…