首页 > 其他分享 >VO是什么?(一文弄懂)

VO是什么?(一文弄懂)

时间:2024-07-29 10:28:44浏览次数:15  
标签:username String UserLoginVO avatarUrl 弄懂 private VO 一文

有了实体类对象pojo(entity)为什么还需要封装vo?

VO (Value Object),是用来描述数据的对象。它通常用于数据传输和展示,不包含任何业务逻辑,只包含数据本身。

pojo和vo对比

  • POJO 主要用于数据持久化和业务逻辑处理。 它通常对应数据库中的表结构,包含所有属性和方法,用于存储和操作数据。
  • VO 主要用于数据传输和展示。 它只包含需要传输或展示的属性,可以根据不同的场景进行定制,例如,在用户注册时,VO 只需要包含用户名、密码和邮箱等信息,而不需要包含用户的其他敏感信息。

为什么要使用VO?

数据安全:

  • VO 可以隐藏敏感信息。 例如,在用户登录后,系统会返回一个包含用户 ID 和用户名的 VO,但不会返回用户的密码等敏感信息。
  • VO 可以对数据进行过滤和转换。 例如,在展示用户列表时,VO 可以只包含用户的姓名、头像和简介等信息,而不会包含用户的其他详细信息。

代码可读性和维护性:

  • VO 可以使代码更简洁易懂。 通过使用 VO,可以将数据传输和展示逻辑与业务逻辑分离,使代码更易于理解和维护。
  • VO 可以提高代码复用性。 不同的场景可以使用不同的 VO,而不需要修改 POJO。

性能优化: VO 可以减少网络传输的数据量,提高系统性能。

如何使用 VO?

  1. 定义 VO 类:

    public class UserVO {
        private String username;
        private String email;
        private String avatarUrl;
    
        // getter and setter methods
    }
    
  2. 创建 VO 对象:

     
    UserVO userVO = new UserVO();
    userVO.setUsername("tdm_888");
    userVO.setEmail("123456");
    userVO.setAvatarUrl("https://csdn.com/avatar.jpg");
    
  3. 使用 VO 对象:

    • 在 Controller 层,将 POJO 对象转换为 VO 对象,然后返回给前端。
    • 在前端,使用 VO 对象中的数据进行展示。

示例:

假设有一个 User POJO 类,包含 idusernamepasswordemailavatarUrl 等属性。

 

public class User {
    private Long id;
    private String username;
    private String password;
    private String email;
    private String avatarUrl;

    // getter and setter methods
}

在用户登录成功后,返回给前端的 VO 对象可以只包含 username 和 avatarUrl

 

public class UserLoginVO {
    private String username;
    private String avatarUrl;

    // getter and setter methods
}

在 Controller 层,将 User 对象转换为 UserLoginVO 对象,然后返回给前端:

 

@GetMapping("/login")
public UserLoginVO login(@RequestParam("username") String username,
                         @RequestParam("password") String password) {
    // 验证用户名和密码
    User user = userService.getUserByUsernameAndPassword(username, password);
    if (user != null) {
        UserLoginVO userLoginVO = new UserLoginVO();
        userLoginVO.setUsername(user.getUsername());
        userLoginVO.setAvatarUrl(user.getAvatarUrl());
        return userLoginVO;
    } else {
        // 返回错误信息
    }
}

前端接收 UserLoginVO 对象,使用 username 和 avatarUrl 进行展示。

标签:username,String,UserLoginVO,avatarUrl,弄懂,private,VO,一文
From: https://blog.csdn.net/weixin_63698171/article/details/140758609

相关文章

  • VO、DTO、Entity:Java 应用中的数据对象详解
    在Java应用程序中,特别是在基于微服务架构的应用中,数据对象(DataObjects)扮演着非常重要的角色。它们不仅有助于组织和传输数据,还能确保应用程序各部分之间的解耦。本文将深入探讨VO(ViewObject)、DTO(DataTransferObject)和Entity之间的区别,并讨论它们在实际项目中的应......
  • 一文掌握YOLOv1-v10
    引言YOLO目标检测算法,不过多介绍,是基于深度学习的目标检测算法中最出名、发展最好的检测器,没有之一。本文简要的介绍一下从YOLOv1-YOLOv10的演化过程,详细技术细节不过多介绍,只提及改进点,适合初学者当综述阅读,也适合有基础的同学用于复习回顾。YOLO系列检测器的整体结构包......
  • 【Linux应用编程】Day10_进程 一文详细剖析进程,从基本概念到创建再到进程操作直至消亡
    进程详细剖析进程,包括以下内容:⚫程序与进程基本概念;⚫程序的开始与结束;⚫进程的环境变量与虚拟地址空间;⚫进程ID;⚫fork()创建子进程;⚫进程的消亡与诞生;⚫僵尸进程与孤儿进程;⚫父进程监视子进程;⚫进程关系与进程的六种状态;⚫守护进程;⚫进程间通信概......
  • 这一文,关于 Java 泛型的点点滴滴 二 (extends、super、<?> 通配符、泛型与反射)
    本文是《这一文,关于Java泛型的点点滴滴》的第二篇,也是最后一篇。在上一篇文章中我们介绍了关于Java泛型的基础知识,而在本文中,我们将深入Java泛型,介绍了extends、super、<?>通配符,并在最后介绍了使用反射获取泛型信息。在阅读本文之前,请先阅读上一篇文章:这一文,关于Jav......
  • JavaEE 初阶(8)——多线程6之线程安全下-->volatile
    之前,我们在 JavaEE初阶(6) 这篇文章中,谈到过引起线程不安全的原因,初步了解了 “可见性” “Java内存模型” “指令重排序”,本章讲解volatile会涉及到这三个知识点,详细内容可以参考  JavaEE初阶(6) 这篇文章。目录一. 引入二.volatile关键字 a.保证“可......
  • YOLOv10全网最新创新点改进系列:ICCV 2023 - 动态蛇形卷积(Dynamic Snake Convolution)采
    YOLOv10全网最新创新点改进系列:ICCV2023-动态蛇形卷积(DynamicSnakeConvolution)采用管状结构,拉升模型小目标、遮挡目标检测效果,高效涨点!!!所有改进代码均经过实验测试跑通!截止发稿时YOLOv10已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合上千万种!改进不重样!!专注A......
  • 【项目实战】解码软件工程:一文读懂DO/PO/BO/AO/DTO/DAO/POJO/VO的奥秘
    文章目录一文读懂DO/PO/BO/AO/DTO/DAO/POJO/VO的奥秘不同领域作用POJO(PlainOldJavaObject)VO(ValueObject)VO(ViewObject)的特点:实体类(Entity)数据传输对象(DTO)领域对象(DomainObject)持久化对象(PersistentObject)业务对象(BusinessObject)应用对象(ApplicationObject)......
  • 一文带你了解Jwt和session的区别
    全栈开发文章目录全栈开发前言Session和Jwt是什么?Session概念工作场景Jwt概念工作场景总结前言因为要重构公司的web端产品,和前端一起对了下接口。在对接用户登录的时候,发现当用户关掉浏览器后再次打开浏览器竟然不能无密码登录。然后就和前端商量了下,后端采用j......
  • 什么是Cookie与Session?(一文搞懂)
    在Web开发中,用户状态管理是一个重要的概念。由于HTTP协议的无状态性,每次请求都是独立的,这意味着服务器无法识别连续的请求是否来自同一用户。为了克服这一限制,Cookie和Session应运而生。本文将详细讲解Cookie和Session的概念、工作原理、优缺点以及它们的使用场景,并通过示例帮......
  • Favoree - YouTube 频道内容导航站 帮你发现优质视频
    YouTube上到处都是优秀的YouTube创作者,但是如何找到最优质最精彩的高质量的视频内容是不容易的,如果有一个已经帮你把YouTube频道进行了归类,把不同主题,热门推荐,高评分频道,新品推荐等等,进行分类供你选择是不是就变得更方便了!什么是Favoree?Favoree是一个帮助用户发......