一篇文章带你搞懂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层方法进行操作,操作完成后将返回结果传递给页面。

目录
打赏
0
1
0
0
65
分享
相关文章
深入理解Spring Boot中的@Service注解
【4月更文挑战第22天】在 Spring Boot 应用开发中,@Service 注解扮演着特定的角色,主要用于标识服务层组件。本篇技术博客将全面探讨 @Service 注解的概念,并提供实际的应用示例,帮助开发者理解如何有效地使用这一注解来优化应用的服务层架构
2320 1
架构师第一课,一文带你玩转 ruoyi 架构
我理解的架构/框架应该有以下功能: 1.满足日常开发功能,如单点登陆、消息队列、监控等; 2.规范开发者的开发,指定代码格式、注释等; 3.提高开发效率,提供一系列的封装方法,并减少bug的产生率。 下文将详细介绍ruoyi框架。
7870 1
架构师第一课,一文带你玩转 ruoyi 架构
什么是低代码(Low-Code)?
什么是低代码?我们为什么需要低代码?低代码会让程序员失业吗?本文总结了低代码领域的基本概念、核心价值与行业现状,带你全面了解低代码。
36839 4
什么是低代码(Low-Code)?
services层和controller层
Controller层和Services层是现代Web应用程序中的两个关键层次。Controller层负责处理客户端请求和生成响应,而Services层负责实现业务逻辑和数据操作。通过将职责明确分离,可以提高代码的可维护性、可扩展性和测试性。希望本文能帮助您更好地理解这两个层次及其实现方法,并在实际开发中应用这些最佳实践。
335 1
了解三层架构:表示层、业务逻辑层、数据访问层
了解三层架构:表示层、业务逻辑层、数据访问层
5886 0
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
这篇文章详细介绍了在Java项目中如何使用MD5算法对用户密码进行加密存储和登录验证,包括加入依赖、编写MD5工具类、注册时的密码加密和登录时的密码验证等步骤,并通过示例代码和数据库存储信息展示了测试效果。
在Java中使用MD5对用户输入密码进行加密存储、同时登录验证。
来聊聊Java项目分层规范
本文讨论了Java项目的分层规范,强调了分层的重要性以避免代码不易扩展和职责边界模糊。作者分享了阿里提出的六层分层模型(开放接口层、终端显示层、Web层、Service层、Manager层、Mapper层)以及对应的领域模型(DO、DTO、VO、query)。同时,提出了简化版的分层规约,以提高开发效率。作者是CSDN Java博客专家,维护者之一的Java Guide项目,并提供了个人项目结构示例。文章鼓励读者关注其公众号以获取更多交流机会。
2411 4
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
13288 5
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问