项目分层开发中,DTO、BO、PO、VO的含义

在后端开发中,比如传统的MVC架构和现在流行的DDD架构,经常回使用到几种对象的概念

  • DTO (Data Transfer Object) 数据传输对象: DTO设计模式用于将数据从服务端传输到客户端,或者在不同的服务之间传递。通常,DTO包含了特定业务场景需要的数据结构,并且不包含任何业务逻辑。它简化了不同服务或模块之间的交互,使得各个层之间的耦合度降低。

  • BO (Business Object) 业务对象: BO代表了业务逻辑层中的对象,封装了与某个业务相关的数据以及针对这些数据的操作逻辑。一个BO可能由多个实体属性组成,并处理涉及多个实体的复杂业务逻辑。

  • PO (Persistent Object) 持久化对象: PO主要用来表示数据库表的一条记录,它的属性和数据库表的字段相对应。通常在持久层(如Hibernate、JPA等ORM框架)中使用,主要用于操作数据库,如保存、更新和查询数据。

  • VO (Value Object) 值对象: VO是视图层的对象,通常用于封装展示给用户的数据,它可以和数据库表对应,也可以根据UI界面需求进行定制。VO的主要目的是在页面展示时只携带必要的数据,从而避免把大量不必要的数据暴露给前端。

这个是PO类

复制代码
@Data
public class User implements Serializable{
    private Long id;

    private String username;

    private String password;

    private String identityCard;

    private String gender;

    private String location;

    private String userImage;

    private String phoneNumber;

    private String createTime;

    private String updateTime;

    @TableLogic
    private int isDelete;
}

UserDTO类

复制代码
@Data
public class UserDTO implements Serializable{
    private Long id;

    private String username;

    private String password;

    private String identityCard;

    private String gender;

    private String location;

    private String userImage;

    private String phoneNumber;
}

UserLoginBO、UserUpdateBO

复制代码
@Data
public class UserLoginBO implements Serializable{
    private String username;

    private String password;
}

@Data
public class UserUpdateBO implements Serializable{
    private Long id;

    private String username;

    private String password;

    private String identityCard;

    private String gender;

    private String location;

    private String userImage;

    private String phoneNumber;
}

UserDTO是一个大的入口,它可以接收整个模块的参数

BO则是在进入Service层之前对UserDTO的数据进行过滤,并且对边界进行控制

最后在进入infra层之前转为PO

其实BO也可以像UserDTO那样,直接一个UserBO包含UserLoginBOUserUpdateBO,单纯的做模型转换,不做值过滤也可以

在后端开发中是这么使用的

相关推荐
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199410 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了10 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品10 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘11 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记11 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端
糖果店的幽灵11 小时前
langgraph的 MessagesState 解读
java·开发语言·人工智能·windows·langgraph
极光代码工作室12 小时前
基于SpringBoot的在线博客系统
java·springboot·web开发·后端开发
我是唐青枫13 小时前
Java Spring Security 实战详解:从登录认证到 JWT 权限控制
java·spring
ihuyigui13 小时前
海外签收通知短信接口
android·java·开发语言·前端·数据库·后端