VO/DTO/PO

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)是常见的设计模式,用于在不同层之间传递数据和组织代码结构。以下是它们的概念、作用、设计目的以及一个简单的场景和代码示例:

  1. VO(View Object):

    • 概念: 用于封装前端视图需要展示的数据,通常与前端页面的展示需求一一对应。
    • 作用: 减少前后端直接交互时的数据传输量,提高数据的可维护性和可读性。
  2. BO(Business Object):

    • 概念: 用于封装业务逻辑中的数据,包含业务领域的相关信息,是与业务逻辑相关的数据结构。
    • 作用: 在业务层传递复杂的业务数据,减轻控制器和服务层之间的数据传递负担。
  3. DTO(Data Transfer Object):

    • 概念: 用于在不同层之间传输数据,尤其是在服务层和控制器层之间。
    • 作用: 通过DTO对象传输数据,避免直接传递领域对象,从而实现数据的封装和隔离。
  4. 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
}

这样的设计使得各层之间的职责清晰,降低了耦合度,提高了代码的可维护性和可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值