SpringBoot实体类——VO/DTO/PO简单总结_vo dto-CSDN博客
https://blog.csdn.net/tang_seven/article/details/129498249?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170234250316800182183319%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170234250316800182183319&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-129498249-null-null.142v96pc_search_result_base4&utm_term=vo%20dto%20po%20&spm=1018.2226.3001.4187
在基于Spring Boot 2的Java Web项目中,VO(View Object)、BO(Business Object)、DTO(Data Transfer Object)和POJO(Plain Old Java Object)是常见的设计模式,用于在不同层之间传递数据和组织代码结构。以下是它们的概念、作用、设计目的以及一个简单的场景和代码示例:
-
VO(View Object):
- 概念: 用于封装前端视图需要展示的数据,通常与前端页面的展示需求一一对应。
- 作用: 减少前后端直接交互时的数据传输量,提高数据的可维护性和可读性。
-
BO(Business Object):
- 概念: 用于封装业务逻辑中的数据,包含业务领域的相关信息,是与业务逻辑相关的数据结构。
- 作用: 在业务层传递复杂的业务数据,减轻控制器和服务层之间的数据传递负担。
-
DTO(Data Transfer Object):
- 概念: 用于在不同层之间传输数据,尤其是在服务层和控制器层之间。
- 作用: 通过DTO对象传输数据,避免直接传递领域对象,从而实现数据的封装和隔离。
-
POJO(Plain Old Java Object):
- 概念: 指普通的Java对象,没有继承特定的类或实现特定的接口。
- 作用: 在系统中作为普通的数据对象,不包含业务逻辑,用于持久化、数据传输等。
设计目的:
- 提高代码的可维护性:通过将不同层的职责进行分离,使得每个对象都专注于特定的任务,从而提高代码的可维护性。
- 降低耦合度:通过在不同层之间传递特定的对象,降低模块之间的耦合度,使得系统更加灵活。
场景和代码示例:
假设有一个简单的用户管理系统,包含前端展示、业务逻辑和持久化存储。我们可以使用上述概念来设计数据传输和业务逻辑。
// POJO
public class User {
private Long id;
private String username;
private String email;
// getters and setters
}
// DTO
public class UserDTO {
private Long id;
private String username;
// getters and setters
}
// BO
public class UserBO {
private Long id;
private String username;
private String email;
// getters and setters
}
// VO
public class UserVO {
private Long id;
private String displayUsername; // 可能需要一些前端展示需要的字段
// getters and setters
}
在控制器中,接收DTO,传递给服务层:
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/create")
public ResponseEntity<Void> createUser(@RequestBody UserDTO userDTO) {
userService.createUser(userDTO);
return ResponseEntity.ok().build();
}
// Other controller methods
}
在服务层中,接收DTO,处理业务逻辑,返回BO:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public void createUser(UserDTO userDTO) {
// 进行业务逻辑处理,例如数据验证等
UserBO userBO = new UserBO();
userBO.setUsername(userDTO.getUsername());
userBO.setEmail(userDTO.getEmail());
// 调用持久化层保存数据
userRepository.save(userBO);
}
// Other service methods
}
在持久化层中,接收BO,保存到数据库:
@Repository
public interface UserRepository extends JpaRepository<UserBO, Long> {
// Custom query methods if needed
}
这样的设计使得各层之间的职责清晰,降低了耦合度,提高了代码的可维护性和可读性。