VO DTO

VO(View Object)用于表示一个与前端进行交互的视图对象,它的作用是把某个指定页面(或组件)的所有数据封装起来。

DTO(Data Transfer Object)用于表示一个数据传输对象,DTO通常用于展示层(Controller)和服务层(Service)之间的数据传输对象。

DTO的使用方法如下:

  1. 定义需要使用的字段,并将其封装入DTO中。
  2. 使用DTO传输数据,一般用于从前端表单中接收数据。

DTO可以用于解耦,如果开发过程中后端模型层更改,增加新的属性,不需要更改面向UI的DTO。

DTO不是业务对象,是面向UI的,根据UI需求进行设计。

VO和DTO的区别主要有以下几点:

  • 作用不同 。VO主要用于UI层的数据展示;DTO主要用于不同层之间的数据传输。
  • 属性不同 。VO的属性通常是只读的,不允许被修改;DTO的属性通常是可读可写的,可以通过它来修改数据的状态。
  • 包含业务逻辑不同 。VO通常不包含业务逻辑;DTO通常包含业务逻辑,但不会进行数据库操作或者其他复杂的计算,它只负责数据的传输和处理。

DTO(Data Transfer Object)通常用于不同层之间的数据传输,它的作用是将数据从一层传输到另一层。

DTO的使用方法如下:

  1. 在UI层,将用户输入的数据封装成一个DTO对象,通过调用服务层的接口将数据传输到服务层。
  2. 在服务层,接收到DTO对象后,从中提取出需要的数据,然后对数据进行处理(如查询数据库、计算等)。
  3. 在服务层,将处理后的数据封装成一个新的DTO对象,然后通过接口返回给UI层。

通过使用DTO,可以将数据的传输和处理分离开来,提高了系统的解耦性和可维护性。

参考:blog.csdn.net

以下是一个示例,展示了如何在Spring Service中使用DTO和VO进行数据传输:

  • 创建一个DTO类(UserDTO),该类用于从前端传递数据到后端:
public class UserDTO {
    private String name;
    private int age;
    // getter and setter methods
}
  • 创建一个VO类(UserVO),该类用于将数据从后端传递到前端:
public class UserVO {
    private String name;
    private int age;
    private String message;
    // getter and setter methods
}
  • 在Controller层中,使用UserDTO作为参数,将前端数据传递给Service层:
@Autowired
private UserService userService;

@PostMapping("/user")
public ResponseEntity<UserVO> createUser(@Valid @RequestBody UserDTO userDTO) {
    UserVO userVO = userService.createUser(userDTO);
    return ResponseEntity.ok(userVO);
}
  • 在Service层中,将UserDTO转换为User实体类,并执行业务逻辑:
@Autowired
private UserRepository userRepository;

public UserVO createUser(UserDTO userDTO) {
    User user = new User();
    user.setName(userDTO.getName());
    user.setAge(userDTO.getAge());
    // 执行业务逻辑,如验证、数据处理等
    // ...
    userRepository.save(user);
    // 创建UserVO并返回给Controller层
    UserVO userVO = new UserVO();
    userVO.setName(user.getName());
    userVO.setAge(user.getAge());
    userVO.setMessage("User created successfully");
    return userVO;
}

通过使用DTO和VO,Controller层和Service层之间的数据传输变得更加清晰和可维护。DTO用于从前端传递数据到后端,而VO用于从后端返回数据到前端。在Service层中,可以将DTO转换为实体类,执行业务逻辑,然后将结果转换为VO并返回给Controller层。

posted @ 2023-09-01 09:47  平小宅  阅读(54)  评论(0编辑  收藏  举报