应用分层是⼀种软件开发设计思想,它将应用程序分成N个层次,这N个层次分别负责各自的职责, 多个层次之间协同提供完整的功能。根据项目的复杂度,把项目分成三层,四层或者更多层。常见的MVC设计模式,就是应用分层的⼀种具体体现。
为什么需要应用分层?
在最开始的时候,为了让项目快速上线,我们通常是不考虑分层的。但是随着业务越来越复杂,大量的代码混在⼀起,会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动⼀处就牵⼀发而动全身等问题。所以学习对项目分层就是我们程序员的必修课了。
如何分层?
"MVC", 就是把整体的系统分成了Model(模型),View(视图)和Controller(控制器)三个层次,也就是将用户视图和业务处理隔离开,并且通过控制器连接起来,很好地实现了表现和逻辑的解耦,是⼀种标准的软件分层架构。
目前现在更主流的开发方式是 "前后端分离" 的方式,后端开发工程师不再需要关注前端的实现,所以对于Java后端开发者,又有了⼀种新的分层架构: 把整体架构分为表现层、业务逻辑层和数据层。这种分层方式也称之为"三层架构"。
- 表现层: 就是接受用户指令和返回数据结果的,是最靠近用户的⼀层;
- 业务逻辑层: 负责处理业务逻辑, 里面有复杂业务的具体实现;
- 数据层: 负责存储和管理与应用程序相关的数据
按照上面的层次划分, 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的⼀套快速开发整合包。