VO、DO、DTO的区别

文中有理解不到位的,欢迎大家斧正!


前言

提示:这里可以添加本文要记录的大概内容:

VO(View Object,视图对象)、DO(Data Object,数据对象)和DTO(Data Transfer Object,数据传输对象)是面向对象编程中常见的设计模式,它们分别在不同的场景下被使用,用来解决不同层次的业务问题。

无论是VO还是实体,一定要注意字段大小写,中间带下划线的比如数据库中字段:user_id,那么在实体中就要写:userId;
如果是userid,那么在实体中不变:userid;

VO里面一般放的是数据库实体类中没有但是用得到的字段(实体中的ID对应VO中的Name)


提示:以下是本篇文章正文内容,下面案例可供参考

  1. VO (View Object) 视图对象

    • 作用:VO主要用在展现层(如Web前端页面),封装了从后端返回给前端展示所需的数据结构。它通常包含了UI界面显示所需要的所有属性,并且这些属性可能经过一定的格式化处理以便于展示。
    • 何时使用:当用户请求一个页面或接口需要展示特定信息时,服务器会根据业务逻辑将DO或DTO转换成VO,然后发送到客户端。
    • 示例场景:在一个用户详情页面上,VO可能包含用户姓名、头像URL、简介等易于渲染到HTML中的属性。
  2. DO (Data Object) 数据对象

    • 作用:DO直接对应数据库表结构,用于表示持久化的实体对象,它的属性与数据库表字段相对应。DO负责存储并管理应用程序内部的数据状态,通常用于操作数据库。
    • 何时使用:在进行CRUD操作(创建、读取、更新、删除)时,DO作为业务逻辑层(Service Layer)操作的对象,以及ORM框架映射到数据库记录的对象。
    • 示例场景UserDO可能包括id、username、password、email等与用户表字段一致的属性。
  3. DTO (Data Transfer Object) 数据传输对象

    • 作用:DTO主要用于服务之间或者分层之间的数据传输,它可以简化服务接口的设计,避免因服务接口变更而影响过多的调用方。同时,DTO可以隐藏内部实现细节,只暴露出必要的数据给外部系统。
    • 何时使用:当不同服务之间交互,或者前后端分离架构中前后端数据交换时,会使用DTO来传递数据,这样可以在不暴露内部模型的情况下进行通信,并且可以根据实际需求对传输的数据进行筛选、组合或格式化。
    • 示例场景:假设有一个用户注册API,UserRegistrationDTO可能包含username、password、email和同意条款标志,而不需要包含其他如密码加密方式、创建时间等不需要跨服务传输的信息。

总结:

  • VO关注于如何更好地呈现数据给用户界面;
  • DO专注于描述和管理数据库中的实体;
  • DTO则更侧重于服务间的数据交互,确保数据安全性和兼容性。

这三者在实际项目中往往结合使用,例如,服务层通过查询数据库获取DO,然后依据前端需求构建相应的VO;或者两个微服务之间,服务A会将DO转换为DTO发送给服务B,以降低耦合度和保护数据隐私。

猜你喜欢

转载自blog.csdn.net/rej177/article/details/133555021