项目分层开发中,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,单纯的做模型转换,不做值过滤也可以

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

相关推荐
小魏冬琅10 分钟前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言
TT哇25 分钟前
【Java】数组的定义与使用
java·开发语言·笔记
look_outs42 分钟前
JavaSE笔记2】面向对象
java·开发语言
武子康1 小时前
大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优
java·大数据·elk·elasticsearch·搜索引擎·全文检索
A_aspectJ1 小时前
‌Spring MVC的主要组件有哪些?
java·spring·mvc
塔塔开!.1 小时前
Maven的依赖
java·maven
liuyang-neu1 小时前
力扣第420周赛 中等 3324. 出现在屏幕上的字符串序列
java·算法·leetcode
划]破1 小时前
Maven的安装及配置
java·maven
讓丄帝愛伱1 小时前
dependencyManagement保持maven的多模块依赖版本一致
java·maven
Ellie陈1 小时前
Java已死,大模型才是未来?
java·开发语言·前端·后端·python