news 2026/4/17 9:57:06

SpringBoot中的命名与开发规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot中的命名与开发规范

SpringBoot中的命名与开发规范

在 Spring Boot 项目开发中,Java 类的命名(如BOPOVODTO)通常是根据其在项目中的角色和职责来确定的。平时开发项目,经常对于这些类名的命名有疑惑,所以记录下来。这些命名约定有助于提高代码的可读性和可维护性。以下是每种类型的定义、使用场景和命名建议:


1. PO (Persistent Object)

定义

  • PO 是持久化对象,通常与数据库表一一对应,用于表示数据库中的一条记录。

使用场景

  • 用于与数据库交互的实体类。
  • 通常与 ORM 框架(如 JPA、MyBatis)一起使用。

命名建议

  • 类名通常与数据库表名对应,例如:
@Entity @Table(name = "user") public class UserPO { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters }

2. DTO (Data Transfer Object)

定义

  • DTO 是数据传输对象,用于在不同层(如 Controller 层和 Service 层)之间传递数据。
  • DTO 通常只包含数据字段,不包含业务逻辑。

使用场景

  • 用于封装 API 请求或响应的数据。
  • 用于减少网络传输的数据量(例如,只传递需要的字段)。

命名建议

  • 类名通常以DTO结尾,例如:
public class UserDTO { private Long id; private String name; private String email; // Getters and Setters }

3. VO (Value Object)

定义

  • VO 是值对象,用于表示一个不可变的对象,通常用于封装一组相关的数据。
  • VO 通常是不可变的(即字段为final),并且没有业务逻辑。

使用场景

  • 用于表示一个复杂的值,例如日期范围、坐标等。
  • 用于封装一组相关的数据,便于传递和使用。

命名建议

  • 类名通常以VO结尾,例如:
public class AddressVO { private final String city; private final String street; private final String zipCode; public AddressVO(String city, String street, String zipCode) { this.city = city; this.street = street; this.zipCode = zipCode; } // Getters }

4. BO (Business Object)

定义

  • BO 是业务对象,用于封装业务逻辑和数据。
  • BO 通常包含业务方法和数据字段。

使用场景

  • 用于封装复杂的业务逻辑。
  • 用于表示一个业务实体,例如订单、用户等。

命名建议

  • 类名通常以BO结尾,例如:
public class OrderBO { private Long id; private List<OrderItem> items; private BigDecimal totalAmount; public BigDecimal calculateTotalAmount() { // Business logic to calculate total amount return items.stream() .map(OrderItem::getAmount) .reduce(BigDecimal.ZERO, BigDecimal::add); } // Getters and Setters }

5. 其他常见对象

(1) Entity

  • 与 PO 类似,但更强调与数据库的映射关系。
  • 通常用于 JPA 实体类。

(2) Model

  • 用于表示一个通用的数据模型,通常用于 MVC 模式中的 Model 层。

(3) Form

  • 用于封装表单数据,通常用于前端提交的数据。

6. 如何确定使用哪种对象?

(1) 根据职责划分

  • PO:与数据库表对应,用于持久化数据。
  • DTO:用于层与层之间的数据传输。
  • VO:用于表示一个不可变的值对象。
  • BO:用于封装业务逻辑和数据。

(2) 根据使用场景

  • 如果对象需要与数据库交互,使用PO
  • 如果对象用于 API 请求或响应,使用DTO
  • 如果对象表示一个复杂的值,使用VO
  • 如果对象包含业务逻辑,使用BO

(3) 根据项目规范

  • 遵循团队或项目的命名规范。
  • 保持一致性,避免混用不同类型的对象。

7. 示例:完整的分层结构

以下是一个典型的分层结构示例:

Controller 层

@RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @PostMapping public ResponseEntity<UserDTO> createUser(@RequestBody UserDTO userDTO) { UserDTO createdUser = userService.createUser(userDTO); return ResponseEntity.ok(createdUser); } }

Service 层

@Service public class UserService { @Autowired private UserRepository userRepository; public UserDTO createUser(UserDTO userDTO) { UserPO userPO = convertToPO(userDTO); userRepository.save(userPO); return convertToDTO(userPO); } private UserPO convertToPO(UserDTO userDTO) { // Conversion logic } private UserDTO convertToDTO(UserPO userPO) { // Conversion logic } }

Repository 层

@Repository public interface UserRepository extends JpaRepository<UserPO, Long> { }

PO 类

@Entity @Table(name = "user") public class UserPO { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters }

DTO 类

public class UserDTO { private Long id; private String name; private String email; // Getters and Setters }

总结

  • PO:与数据库表对应,用于持久化数据。
  • DTO:用于层与层之间的数据传输。
  • VO:用于表示一个不可变的值对象。
  • BO:用于封装业务逻辑和数据。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:00:51

Delta模拟器金手指功能详解:3分钟掌握无敌游戏技巧

Delta模拟器的金手指功能是iOS平台上最强大的游戏修改工具之一&#xff0c;让玩家能够轻松解锁无限生命、无限金钱等游戏效果。通过简洁的界面设计和智能的作弊码管理&#xff0c;即使是新手用户也能快速上手&#xff0c;享受无敌游戏体验。 【免费下载链接】Delta Delta is an…

作者头像 李华
网站建设 2026/4/18 3:30:58

Rebel框架深度解析:打造卓越macOS应用体验的终极利器

Rebel框架深度解析&#xff1a;打造卓越macOS应用体验的终极利器 【免费下载链接】Rebel Cocoa framework for improving AppKit 项目地址: https://gitcode.com/gh_mirrors/reb/Rebel Rebel是一个专为macOS应用开发设计的Cocoa框架&#xff0c;它通过一系列精心设计的类…

作者头像 李华
网站建设 2026/4/17 22:44:23

ESP32 DMA驱动LED矩阵:高性能RGB显示终极指南

ESP32 DMA驱动LED矩阵&#xff1a;高性能RGB显示终极指南 【免费下载链接】ESP32-HUB75-MatrixPanel-DMA An Adafruit GFX Compatible Library for the ESP32, ESP32-S2, ESP32-S3 to drive HUB75 LED matrix panels using DMA for high refresh rates. Supports panel chainin…

作者头像 李华
网站建设 2026/4/17 22:43:08

DeepBump:从单张图片智能生成3D纹理的终极指南

DeepBump&#xff1a;从单张图片智能生成3D纹理的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中复杂的法线贴图制作而烦恼吗&#xff1f;DeepBum…

作者头像 李华
网站建设 2026/4/17 22:43:07

为什么说CTF才是新手的实战开挂神器?

圈里人都叫CTF“安全圈的实战练兵场”&#xff0c;新手靠它快速练技能&#xff0c;老手靠它冲排名拿offer。今天就用大白话讲透&#xff1a;CTF到底是什么&#xff1f;普通人怎么入门不踩坑&#xff1f;以及它为什么能让你求职时碾压同届&#xff1f; 一、先搞懂&#xff1a;C…

作者头像 李华
网站建设 2026/4/17 22:43:08

如何提升Wan2.2-T2V-A14B生成视频的一致性与稳定性?

如何提升Wan2.2-T2V-A14B生成视频的一致性与稳定性&#xff1f; 在短视频日活破十亿、AI内容生产进入“秒级交付”时代的今天&#xff0c;你有没有发现&#xff1a;我们早就不缺“能动的画面”&#xff0c;但依然很难看到一段真正“自然流畅”的AI生成视频&#xff1f; 闪烁的角…

作者头像 李华