news 2026/8/9 5:53:32

Spring MVC(六)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring MVC(六)

应用分层

目前我们程序的代码有点"杂乱",然而当前只是"一点点功能"的开发。如果把整个项目功能完成呢?代码会更加的"杂乱无章"(文件乱,代码内容乱)。

也基于此,我们接下来学习应用分层。

(1) 介绍

阿里开发手册中,关于工程结构部分,定义了常见的应用分层结构:

那么什么是应用分层呢?

应用分层是一种软件开发思想,它将应用程序分成N个层次,这N个层次分别负责各自的职责,多个层次之间协同提供完整的功能。根据项目的复杂程度,把项目分成三层、四层或者更多层。

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

为什么需要应用分层?

在最开始的时候,为了让项目快速上线,我们通常是不考虑分层的,但是随着业务越来越复杂,大量的代码混在一起会出现逻辑不清楚、各模块相互依赖、代码扩展性差、一改动就牵一发动全身等问题。

如何分层

目前更流行的开发方式是"前后端分离"的方式,后端开发工程师不再需要关注前端的实现,所以对于Java后端开发者,又有了一种新的分层架构:把整体架构分为表现层、业务逻辑层和数据层。这种分层方式也称之为"三层架构"。

1.表现层:就是展示数据结果和接受用户指令的,最靠近用户的一层

2.业务逻辑层:负责处理业务逻辑,里面有复杂业务的具体实现
3.数据层:负责存储和管理与应用程序相关的数据

按照上面的层次划分,Spring MVC站在后端开发人员的角度上,也进行了支持,把上面的代码划分成为三个部分:

  • 请求处理、响应数据:负责接收页面的请求,给页面响应数据
  • 逻辑处理:负责业务逻辑处理的代码
  • 数据访问:负责业务数据的维护操作,包括增删改查等操作

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

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

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

从概念上来看,二者都是软件工程领域中的架构模式

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

二者其实是从不同角度对软件工程进行了抽象.

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

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

二者的目的都是相同的,都是"解耦,分层,代码f复用"

软件设计原则"高内聚低耦合"

高内聚指的是:一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句,程序段)之间的联系程度越高,则内聚性越高.

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

企业规范

  1. 类名使用大驼峰风格,但以下情形例外:DO/BO/DTO/AO/VO
  2. 方法名,参数名,成员变量,局部变量统一使用小驼峰风格
  3. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的单词

图书管理系统

需求:

1.登录:用户输入账号,密码完成登录功能

2.列表展示:展示图书

接口定义:

1.登录接口

@RestController @RequestMapping("/user") public class UserName { @RequestMapping("/login") public Boolean login(String name,String password){ if(!StringUtils.hasLength(name)||!StringUtils.hasLength(password)){ return false; } if("admin".equals(name)&&"admin".equals(password)){ return true; } return false; } }

2.列表展示接口

package com.imu.springbook; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Random; @RestController @RequestMapping("/book") public class BookController { @RequestMapping("/getList") public List<BookInfo> getList(){ List<BookInfo> list=new ArrayList<>(); for (BookInfo bookInfo:list){ if(bookInfo.getStatus()==1){ bookInfo.setStatusCN("可借阅"); }else{ bookInfo.setStatusCN("不可借阅"); } } return list; } public List<BookInfo> mockBook(){ List<BookInfo> bookInfos=new ArrayList<>(); for (int i = 0; i < 8; i++) { BookInfo bookInfo=new BookInfo(); bookInfo.setAuthor("作者"+i); bookInfo.setId(i); bookInfo.setCount(i*5+1); bookInfo.setPrice(new BigDecimal(new Random().nextInt(100))); bookInfo.setPublish("中国人民出版社"); bookInfo.setStatus(i%5==0?2:1); } return bookInfos; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/9 5:51:25

技术博主如何构建数据驱动的选题库实现高质量内容持续输出

如果你是一名技术博主&#xff0c;每天打开编辑器&#xff0c;最头疼的是什么&#xff1f;不是技术本身&#xff0c;—— 而是“今天写什么”。你可能有扎实的功底&#xff0c;能写出高质量的代码解析&#xff0c;但选题枯竭、灵感耗尽&#xff0c;让你陷入“技术性沉默”。更残…

作者头像 李华
网站建设 2026/8/9 5:50:21

Claude Code状态栏深度配置指南:从安装到高效集成

1. 从“装上了”到“用得好”&#xff1a;Claude Code状态栏配置的核心价值如果你已经成功在VS Code里装上了Claude Code插件&#xff0c;却发现它除了在侧边栏聊天&#xff0c;好像和你的编码工作流没什么深度结合&#xff0c;那你可能和我当初一样&#xff0c;只完成了第一步…

作者头像 李华
网站建设 2026/8/9 5:49:13

ComfyUI 部署进阶:从一键安装到构建稳定高效AI绘画工作环境

最近在折腾 Stable Diffusion 时&#xff0c;我发现一个挺有意思的现象&#xff1a;很多朋友兴冲冲地下载了最新的 ComfyUI 整合包&#xff0c;解压、双击、启动&#xff0c;一气呵成&#xff0c;然后……就卡在了各种意想不到的地方。要么是插件加载失败&#xff0c;要么是模型…

作者头像 李华
网站建设 2026/8/9 5:44:46

Godot物理引擎核心架构与实战:从碰撞检测到角色控制

1. 项目概述&#xff1a;从零开始理解Godot物理引擎如果你刚开始接触Godot引擎&#xff0c;可能会被它琳琅满目的节点和系统搞得有点懵&#xff0c;尤其是“物理引擎”这个概念。它听起来很底层、很复杂&#xff0c;像是游戏引擎里那些看不见摸不着的黑盒子。但事实上&#xff…

作者头像 李华
网站建设 2026/8/9 5:44:30

从零构建多智能体协作系统:CrewAI实战指南与工程化实践

最近&#xff0c;Meta AI 研究主管 Yann LeCun 在一次访谈中抛出了一个让技术圈热议的观点&#xff1a;一个由 AI 智能体组成的“智能体群”&#xff0c;其解决问题的能力未来可能超越一个百人规模的工程师团队。这听起来像是科幻电影的桥段&#xff0c;但背后指向的&#xff0…

作者头像 李华
网站建设 2026/8/9 5:44:14

AU视频创作全流程拆解:从创意到成片的技术实现指南

1. 这篇文章真正要解决的问题当你在B站、抖音等平台看到“小潮team”的原创AU&#xff08;Alternative Universe&#xff0c;平行宇宙&#xff09;系列视频&#xff0c;尤其是像《浪潮05》这样标题颇具古风意蕴的作品时&#xff0c;你是否会产生这样的疑问&#xff1a;这些看似…

作者头像 李华