一篇文章带你搞懂Controller、Service等各层的功能与作用

简介: 本文将深入探讨这些controller.service等层的作用与功能,帮助读者更好地理解它们在软件开发中的重要性和运作原理。

在spring项目中,不同的层次往往负责不同的任务。Controller层通常负责处理用户请求和响应,Service层则承担着业务逻辑的处理和管理,DAO层负责与数据库交互等等。本文将深入探讨这些关键层的作用与功能,帮助读者更好地理解它们在软件开发中的重要性和运作原理。


常见的代码结构:

工具类层(Util)

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

数据层(POJO)

POJO对象

POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,对于广大的程序员,可以很方便的将POJO类当做对象来进行使用,当然也是可以方便的调用其get,set方法。

数据对象(XxxDO/XxxPO/XxxEntity)
  • PO:持久对象,与数据库中的表相映射的Java对象
  • DO(Data Object):阿里巴巴专指数据库表一对应的POJO类。此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • Entity:数据对象,实体严格与数据库对应,数据库中有什么字段,entity包中的类就有什么字段。

用法:

  • XxxDOXxxPO(持久层对象)或XxxEntity(Xxx 与数据库表名保持一致)来表示,或直接与表名一致无任何结尾.
  • 类中字段要与数据库字段保持一致,不能缺失或者多余
  • 类中的每个字段添加注释,并与数据库注释保持一致
传输对象(XxxDTO)

DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象

用法:

  • 不可以继承自 Entity
  • DTO 可以继承、组合其他 DTO,VO,BO 等对象
  • DTO 只能用于前端、RPC 的请求参数
视图对象(XxxVO)

VO(View Object:业务层之间数据传递的对象,把某个指定页面(或组件)的所有数据封装起来。

view(视图):一般里面存放的是对实体表的映射类(视图类),是用来给前端用的。

用法:

  • 不可继承自DO
  • VO可以继承、组合其他DTOVOBO等对象
  • VO 只能用于返回前端、rpc 的业务数据封装对象

XxxVO不具体属于哪个层,而是POJO在数据传递中的数据形式。简而言之,就是接口之间传递的数据封装。

DTO与view的用法相同,但是叫法不同。

例如

表里面有十几个字段:id,name,age……

页面需要展示三个字段:name,age,此时可以使用view来存储这几个字段,

在view包(一般放在controller层)中定义user_view类,将user表中的name、age存入user_view视图,这样在进行操作时只需调用视图表,就可以完成相对应的操作.

简单来说,我们不需要把整个PO对象的全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。此时,如果这个对象用来对应界面的展现,就叫VO。

业务对象(XxxBO)

BO(Business Object):业务对象,可以由Service层输出的封装业务逻辑的对象。

用法:

  • 不可以继承自DO
  • BO对象只能用于 servicemanagerdao 层,不得用于 controller
数据查询对象(XxxQuery)

Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。

用法:

  • Controller的请求参数
  • 也可采用XxxRequest
Domain包

domain = 域

域是一个大范围,例如,一个商城项目,商城主要的模块就是用户,订单,商品三大模块,那么这三块数据就可以叫做三个域。再例如一个招聘网站的项目,如简历域包括工作经验表、项目经验表、简历基本信息表。在domain包中,就可以定义一个大的简历对象,将三个表的内容整合在一个对象中,作为整体操作。

Entity包

entity = 实体

严格和数据库相对应,数据库中有什么字段,entity包中的类就有什么字段。entity包中的类是必须和数据库相对应的

比如user表中有name、id、age,则entity包中对应的同名类也只有这三个同名属性,且数据类型也必须一致。不能数据库存的是long类型,user类中的属性为string类型。

Model包

model = 模型

当用model当包名时,一般里面存的是实体类的模型,是用来给后端用的。(一般model包放在service层)

比如user表中有name、id、age等信息,前台页面只需要显示姓名,如果将Entity全部传给前台,产生了许多无用的数据,使用model就可以解决该问题。前台需要什么数据,model就包含什么数据就行了。

注意点:

  • 严格对数据库表进行操作,采取使用entity。
  • 对几个表综合操作,采用domain。
  • 显示几个表的综合信息,使用model。
  • domain、model、entity包中的类都属于POJO类。

数据访问层

DAO

DAO全称是(Data Access Objects) ,数据库访问对象,主要的功能就是用于进行数据操作的,在程序的标准开发架构中属于数据访问层的操作。

可以简单理解为一张数据表,就有一个DAO与之对应,与数据库的操作,增删改查等方法。举例:对于user类,其对应的dao包就是对user表中数据的增删改查方法。

DAO层可以实现对数据的持久化操作,例如通过数据库访问、网络访问或者文件访问等方式。它提供了一种抽象的数据访问接口,使得业务逻辑可以通过DAO的接口来访问数据,而不需要关心具体的数据访问实现方式。

Mapper

Mapper模式通常是指对象-关系映射(ORM)中的组件。

它负责将领域对象和数据库表之间进行映射,实现数据的读取和写入。Mapper将数据库操作转换为对象操作,屏蔽了底层数据库的细节,使得开发人员可以使用面向对象的方式操作数据。

它可以处理对象与关系型数据库之间的转换,包括查询、插入、更新和删除等操作。

异同点:

  • mapper层 = dao层,若使用mybatis框架,则其生成的类名字是mapper,其实就是dao层。
  • Mapper模式主要用于对象-关系映射,将对象和数据库表之间进行映射,实现数据的读取和写入。
  • DAO模式主要用于数据访问层,将业务逻辑与数据访问逻辑分离,提供一组接口或类来定义对数据的增删改查等操作。

业务层

Service层:服务层

由于Dao里面存放了对表操作的方法,entity类中存放了映射表的POJO类。Service的作用就是将Dao和entity类整合起来,进行再次封装,封装成一个方法,我们调用这个方法,就实现了对某个表的增删改查操作。

Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求;
而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现。

控制层

Controller

负责请求转发,接受页面传递过来的参数,根据参数的不同,是调用不同的Service层方法进行操作,操作完成后将返回结果传递给页面。

目录
相关文章
|
4月前
|
Kubernetes 网络协议 应用服务中间件
k8s教程(service篇)-ingress 7层路由机制(上)
k8s教程(service篇)-ingress 7层路由机制(上)
222 0
|
4月前
|
Kubernetes 安全 网络协议
k8s教程(service篇)-ingress 7层路由机制(下)
k8s教程(service篇)-ingress 7层路由机制(下)
80 0
|
4月前
|
Kubernetes 负载均衡 Linux
k8s教程(service篇)-概念和原理(上)
k8s教程(service篇)-概念和原理(上)
69 0
|
4月前
|
Kubernetes 监控 网络协议
k8s教程(service篇)-概念和原理(下)
k8s教程(service篇)-概念和原理(下)
78 0
k8s教程(service篇)-概念和原理(下)
|
6月前
|
存储 前端开发 Java
Service 层异常抛到 Controller 层处理还是直接处理?
Service 层异常抛到 Controller 层处理还是直接处理?
354 1
|
9月前
|
Kubernetes 前端开发 网络协议
【k8s 系列】k8s 学习十九,service 2 暴露服务的 3种 方式
之前我们简单的了解一下 k8s 中 service 的玩法,今天我们来分享一下 service 涉及到的相关细节,我们开始吧
171 0
|
9月前
|
Kubernetes 监控 Perl
【k8s 系列】k8s 学习二十七 - 6,k8s 自身原理之 Service
好不容易,终于来到 k8s 自身的原理之 关于 Service 的一部分了 前面我们用 2 个简图展示了 pod 之间和 pod 与 node 之间是如何通信息的,且通信的数据包是不会经过 NAT 网络地址转换的
|
10月前
|
SQL Java 程序员
为啥SpringBoot更多普遍采用Controller+Service接口层+ServiceImpl接口实现层
为啥SpringBoot更多普遍采用Controller+Service接口层+ServiceImpl接口实现层
244 0
|
10月前
|
SQL 前端开发 JavaScript
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
439 0
|
监控 安全 Serverless
AAS即As-a-Service的概念
列举一些接触到的AAS即As-a-Service的概念
342 0