代码改变世界

Spring项目的层级结构理解

2023-06-08 12:17  第二个卿老师  阅读(242)  评论(0编辑  收藏  举报

前言

作为测试,能看开发代码是一件颇有成就的事。理解后端的项目架构,有利于测试的深入,问题的定位。目前Spring架构已经流行很多年了,这里整理下零碎的知识。


 

引用ChatGPT的:

 SpringBoot分层与请求处理

View层---> Controller层(响应前端用户请求) ---> Service层(接口 > 接口实现类) ---> DAO层,即Mapper层(操作数据库,抽象类:xxxMapper.java文件,具体实现在xxxMapper.xml) ---> Model层(对应数据库表,实体类:xxx.java)。

SpringBoot中对各个层的理解

View层

view视图,当用view当包名时,一般里面存放的是对实体表的映射类(视图类),是用来给前端用的,比如只想展示某个表中的几段信息,view包一般放在controller层。

比如user表中有name、id、age,出于某些原因,我们只需要向用户展示name和id值,但进行相关操作时,我们往往需要对user表进行很复杂读处理,每次定义都很麻烦。

因此可以在view层中定义user_view类,将user表中的name、id存入user_view视图,这样在进行操作时只需调用视图表,就可以完成相对应的操作。

Controller层

控制层,用作业务模块流程的控制,controller层主要调用service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。

也就是说,controller层的功能为请求和响应控制。负责前后端交互,接受前端请求,调用service层,接受service层返回的数据,最后返回具体的页面和数据到客户端。

好处:封装service层的业务逻辑有利于业务逻辑的独立性和重复利用性。

Service层

业务层,业务模块的逻辑应用设计,和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。

service层为业务服务,调用mapper层并提供给controller层使用,间接和数据库打交道。

项目结构包括两部分,接口文件和接口实现类文件,接口文件中定义在controller层中调用的service层方法;接口实现类文件中完成service层接口中定义的方法的实现。

注意:这里接口实现类中方法的实现是指业务逻辑的实现,可能有些方法并不能在实现类里完成真正意义上的实现,还需要在mapper层文件完成其真正意义上的实现(主要是和数据库交互)。

Dao层(Mapper层)

持久层,主要是和数据库进行交互。dao层首先会创建dao接口,接着在配置文件中定义该接口的实现类,然后可以在模块中调用dao的接口进行数据业务的处理。

简单的说就是:dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。

因为后端在实际业务场景中需要存储大量数据,而用户需要的数据只是一部分,为了快速获取用户需要的数据,应该把用户经常用到的数据在dto层中进行封装,在调用服务层时,只需要调用一次便可完成所有的逻辑操作。

Model层(Entity层)

实体层,数据库在项目中的类。用于定义与数据库对象的属性,提供get/set方法,带参和无参的构造方法。

entity = 实体,一般数据库一张表对应一个实体类,类属性同表字段一一对应。比如user表中有name、id、age,则entity包中对应的同名类也只有这三个同名属性。

Model = 模型,比如user表中有name、id、age,用户的密码定义在user_passwd表,进行相关操作时需要将两个表关联使用,每次定义都很麻烦。因此可以在model层中定义user_model类,将user表与user_passwd表中两表的信息整合成一张综合表,这样在进行操作时只需调用综合表,就可以完成对两个表的关联操作。

如果是严格对数据库表操作,就用entity,如果想显示某个几个表的综合信息,就用model,注意model包一般放在service层。 

其他术语(VO,Util,POJO,Domain,DTO)

vo

即view层,value object值对象/view object表现层对象。

Util

工具,util层存放工具类,对于一些独立性很高的小功能,或重复性很高的代码片段,可以提取出来放到Util层中。

POJO

简单无规则Java对象,只有属性+get+set方法,domain,entity,model,都属于pojo类。

domain

域,域是一个大范围,如果想对几个表综合操作,就用domain。

如雇员域包括雇员工作经历表、雇员考勤表、雇员基本信息表。 在domain包中,就可以定义一个大的雇员对象,将三个表的内容整合在一个对象中,作为整体操作。

DTO

DTO = Data Transfer Object = 数据传输对象,与view的用法相同,不过是叫法不同。