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

应用分层

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

为什么需要应用分层?

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

如何分层?

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

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

  1. 表现层: 就是接受用户指令和返回数据结果的,是最靠近用户的⼀层;
  2. 业务逻辑层: 负责处理业务逻辑, 里面有复杂业务的具体实现;
  3. 数据层: 负责存储和管理与应用程序相关的数据

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

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

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

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

MVC 和三层架构的区别和联系
关于⼆者的关系,⼀直存在不同的观点。有人认为三层架构是MVC模式的⼀种实现, 也有人认为MVC是三层架构的替代方案,等等各种说法都有。根本原因是大家站在不同的角度来看待这个问题的。

从概念上来讲,⼆者都是软件工程领域中的架构模式。MVC架构模式由三部分组成, 分别是: 模型(Model), 视图(View)和控制器(Controller)。三层架构将业务应用划分为:表现层,业务逻辑层,数据访问层。

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

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

  • 高内聚指的是:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即 "高内聚"。
  • 低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。修改⼀处代码, 其他模块的代码改动越少越好。

高内聚低耦合矛盾吗?
不矛盾, 高内聚指的是⼀个模块中各个元素之间的联系的紧密程度, 低耦合指的是各个模块之间的紧密程度这就好比⼀个企业,包含很多部门,各个部门之间的关联关系要尽可能的小,⼀个部门发⽣问题,要尽可能对降低对其他部门的影响,就是耦合。但是部门内部员⼯关系要尽量紧密,遇到问题⼀起解决,克服,这叫做内聚。比如邻里邻居, 楼上漏水, 楼下遭殃, 就是耦合。家庭⼀个成员生病,其他成员帮忙照顾,就叫内聚。⼀个家庭内部的关系越紧密越好,⼀个家庭尽可能少的影响另⼀个家庭,就是低耦合。

企业规范

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

常见命名风格介绍

  • 大驼峰: 所有单词首字母都需要大写, 又叫帕斯卡命名法, 比如: UserController
  • 小驼峰: 除了第⼀个单词,其他单词首字母大写,比如: userController
  • 蛇形: 用下划线(_)作用单词间的分隔符,⼀般小写,又叫下划线命名法,比如: user_controller(数据库字段命名)
  • 串形: 用短横线(-)作用单词间的分隔符,又叫脊柱命名法,比如: user-controller(CSS样式名等)

Spring, Spring Boot 和Spring MVC的关系以及区别

1.Spring: 这里指spring framework简单来说, Spring 是⼀个开发应用框架,什么样的框架呢,有这么几个标签:轻量级、⼀站式、模块化,其目的是用于简化企业级应用程序开发。

  • Spring的主要功能: 管理对象,以及对象之间的依赖关系, 面向切面编程, 数据库事务管理, 数据访问, web框架支持等.
  • 但是Spring具备高度可开放性, 并不强制依赖Spring, 开发者可以自由选择Spring的部分或者全部, Spring可以无缝继承第三方框架,比如数据访问框架(Hibernate 、JPA), web框架(如Struts、JSF)

2.Spring MVC: Spring MVC是Spring的⼀个子框架, Spring诞生之后, 大家觉得很好用,于是按照MVC模式设计了⼀个 MVC框架(⼀些用Spring 解耦的组件),主要用于开发WEB应用和网络接口,所以,Spring MVC 是⼀个Web框架。

  • Spring MVC基于Spring进行开发的,天生的与Spring框架集成。可以让我们更简洁的进行Web层开发,支持灵活的 URL 到页面控制器的映射,提供了强大的约定大于配置的契约式编程支持,非常容易与其他视图框架集成,如 Velocity、FreeMarker等。

3.Spring Boot: Spring Boot是对Spring的⼀个封装, 为了简化Spring应用的开发而出现的,中小型企业,没有成本研究自己的框架,使用Spring Boot 可以更加快速的搭建框架,降级开发成本,让开发⼈员更加专注于Spring应用的开发,而无需过多关注XML的配置和⼀些底层的实现。

  • Spring Boot 是个脚手架, 插拔式搭建项目, 可以快速的集成其他框架进来。
  • 比如想使用SpringBoot开发Web项目,只需要引入Spring MVC框架即可,Web开发的工作是SpringMVC完成的,而不是SpringBoot,想完成数据访问,只需要引入Mybatis框架即可。Spring Boot只是辅助简化项目开发的,让开发变得更加简单,甚至不需要额外的web服务器,直接生成jar包执行即可。


最后⼀句话总结: Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的⼀个MVC 框架,而Spring Boot 是基于Spring framwork的⼀套快速开发整合包。

http://www.dtcms.com/a/310523.html

相关文章:

  • 菜鸟教程Shell笔记 数组 运算符 echo命令
  • Qwen2 RotaryEmbedding 位置编码仅仅是第一层有吗
  • 深度学习-梯度爆炸与梯度消失
  • Node.js的用途和安装方法
  • flutter——ColorScheme
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2021年10月24日真题
  • Class28批量归一化
  • java下载word
  • 第七章 愿景14 数据规划
  • 吃透 B + 树:MySQL 索引的底层逻辑与避坑指南
  • SpringMVC全局异常处理+拦截器使用+参数校验
  • Bootstap Vue 之b-form-radio-group 不显示选中状态问题
  • 高并发爬虫的限流策略:aiohttp实现方案
  • 8.1 开始新的学习历程
  • 深入理解 Linux 进程地址空间
  • 一体化智能截流井市场报告:深度解析行业现状与未来增长潜力
  • 【Dart 教程系列第 51 篇】Iterable 中 reduce 函数的用法
  • Vue2 项目实现 Gzip 压缩全攻略:从配置到部署避坑指南
  • 静电释放检测漏报率↓85%!陌讯多模态融合算法在电子厂ESD防护实战解析
  • 【数据可视化-77】中国历年GDP数据可视化分析:Python + Pyecharts 深度洞察(含完整数据、代码)
  • QT中的window()方法/获取到控件最顶部容器
  • Effective C++ 条款16: 成对使用new和delete时要采用相同形式
  • 1、【C语言】【进阶】数组,指针与退化
  • 【Node.js安装注意事项】-安装路径不能有空格
  • Go 语言中 ​10 个高频实用写法
  • C语言:20250801学习(构造类型)
  • C++___快速入门(下)(引用)
  • Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table
  • 大模型学习思路推荐!
  • 基于K近邻的缺失值填补:原理、步骤与实战解析