应用分层

应用分层是⼀种软件开发设计思想,它将应用程序分成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.pswp.cn/pingmian/91433.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91433.shtml

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

相关文章

[特殊字符] 【JAVA进阶】StringBuilder全方位解析:从使用到源码,一文搞定!

🔥 掌握StringBuilder,让你的Java字符串操作性能飙升!🧩 StringBuilder是什么? StringBuilder是Java中用于动态构建字符串的可变字符序列类,位于java.lang包中。与不可变的String类不同,StringB…

Redis 数据结构全景解析

Redis 不是简单的 key-value 缓存,它更像一把“瑞士军刀”。 只要掌握数据结构,就能把同一份内存用出 10 倍效率。0. 开场白:为什么聊数据结构? 面试常问“Redis 有几种数据类型?”——很多人答 5 种(Strin…

ansible.cfg 配置文件的常见配置项及其说明

配置项说明默认值defaults默认配置部分inventory指定清单文件的位置,可以是文件路径、目录或动态清单脚本。/etc/ansible/hostsremote_user默认的远程用户roothost_key_checking是否启用主机密钥检查。设置为 False 跳过 SSH 主机密钥验证。Trueask_pass是否在执行时…

Effective C++ 条款15:在资源管理类中提供对原始资源的访问

Effective C 条款15:在资源管理类中提供对原始资源的访问核心思想:RAII类需要提供访问其封装原始资源的显式或隐式接口,以兼容需要直接操作资源的API,同时维持资源的安全管理。 ⚠️ 1. 原始资源访问的必要性 使用场景示例&#x…

Linux 进程管理与计划任务设置

Linux 进程管理与计划任务设置一、进程管理进程管理用于监控、控制系统中运行的程序(进程),包括查看进程状态、调整优先级、终止异常进程等。以下是核心命令及操作说明:1. 常用进程查看命令(1)ps&#xff1…

MYSQL数据库之索引

1、引入索引的问题在图书馆查找一本书的过程,可类比数据库查询场景。在一般软件系统中,对数据库操作以查询为主,数据量较大时,优化查询是关键,索引便是优化查询的重要手段 。2、索引是什么索引是一种特殊文件&#xff…

ArcGIS以及ArcGIS Pro如何去除在线地图制作者名单

问题:ArcGIS和ArcGIS Pro提供了许多在线地图服务,但是这些地图会自动生成制作者名单,如下图所示: 在线地图加载方式可参考:如何在ArcGIS和ArcGIS Pro中添加在线底图 这在出图时有时会造成图的部分信息遮挡或出图不美观…

InfluxDB 与 Golang 框架集成:Gin 实战指南(二)

四、实际应用案例4.1 案例背景某智能工厂部署了大量的物联网设备,如传感器、智能仪表等,用于实时监测生产线上设备的运行状态、环境参数(如温度、湿度)以及生产过程中的各项指标(如产量、次品率)。这些设备…

Linux系统磁盘未分配的空间释放并分配给 / 根目录的详细操作【openEuler系统】

选择 Fix 修正 GPT 表 输入 Fix 并按回车,parted 会自动: 扩展 GPT 表的 结束位置 到磁盘末尾。释放未被使用的空间(1048576000 个 512B 块,约 500GB)。 验证修正结果 修正后,再次运行: parted …

王道考研-数据结构-01

数据结构-01视频链接:https://www.bilibili.com/video/BV1b7411N798?spm_id_from333.788.videopod.sections&vd_source940d88d085dc79e5d2d1c6c13ec7caf7&p2 数据结构到底在学什么? 数据结构这门课他要学习的就是怎么用程序代码把现实世界的问题给信息化&…

k8s云原生rook-ceph pvc快照与恢复(上)

#作者:Unstopabler 文章目录前言部署rook-ceph on kubernets条件Ceph快照概述什么是PVC安装快照控制器和CRD1.安装crds资源2.安装控制器3.安装快照类前言 Rook 是一个开源的云原生存储编排器,为各种存储解决方案提供平台、框架和支持,以便与…

springcloud04——网关gateway、熔断器 sentinel

目录 注册中心 nacos | eurekaServer |zookeeper(dubbo) 配置中心 nacos | config Server 远程服务调用 httpClient | RestTemplate | OpenFeign 负载均衡服务 ribbon | loadbalancer 网关 zuul | gateway 熔断器 hystrix | sentinel 网关 sentinel 流控 压测工具 1…

XSS跨站脚本攻击详解

一、XSS攻击简介跨站脚本攻击的英文全称是Cross-Site Scripting,为了与CSS有所区别,因此缩写为“XSS”由于同源策略的存在,攻击者或者恶意网站的JavaScript代码没有办法直接获取用户在其它网站的信息,但是如果攻击者有办法把恶意的…

Linux /proc/目录详解

文章目录前言文件说明注意事项前言 在 Linux 系统中,/proc 目录是一个特殊的虚拟文件系统,它提供了对系统内核和进程的访问。/proc 目录中的文件和目录不是真实存在的,它们是在运行时由内核动态生成的,用于提供系统和进程的相关信…

北斗变形监测在地质灾害监测中的应用

内容概要 北斗形变监测系统在地质灾害监测领域发挥着核心作用,该系统基于北斗卫星导航技术,实现对地表变形的精确追踪。通过毫米级精度定位能力,北斗形变监测技术为滑坡等灾害提供关键数据支撑,尤其在偏远地区应用中,单…

2025新征程杯全国54校园足球锦标赛在北京世园公园隆重开幕

2025年8月1日,备受瞩目的2025新征程杯全国54校园足球锦标赛(北京)在北京世园公园盛大拉开帷幕。开幕式上,中国关心下一代健康体育基金会副秘书长、中国青少年研究会理事、全国 54 校园足球人才培养计划创始人何占强主任表示&#…

分类预测 | Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测

分类预测 | Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测 目录分类预测 | Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测分类效果基本介绍程序设计分类效果 基本介绍 1.Matlab实现CPO-PNN冠豪猪算法优化概率神经网络多特征分类预测,运…

机器学习——逻辑回归(LogisticRegression)的核心参数:以约会数据集为例

理解 LogisticRegression 的核心参数:以约会数据集为例 逻辑回归(Logistic Regression)是机器学习中一种基础且重要的分类算法,特别适用于解决二分类和多分类问题。本文将基于 sklearn.linear_model.LogisticRegression 的用法&a…

深入解析 Apache Flink FLIP-511:优化 Kafka Sink 事务处理,减轻 Broker 负载

一、 背景与核心问题:Kafka Sink 事务的痛点 Flink Kafka Sink 在 Exactly-Once 模式下依赖 Kafka 事务来确保数据写入的原子性,并与 Flink 检查点对齐。然而,非优雅关闭(如任务失败、非 stop-with-savepoint 的停止)会…

设计模式:组合模式 Composite

目录前言问题解决方案结构代码前言 组合是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。 问题 如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。 例如, 你有两…