po dto vo

针对前后端分离项目中出现的问题,如重复的Bean定义及属性拷贝等,提出了一种优化方案,即调整DTO的位置并简化其使用方式,以此来减少开发工作量。
对于前台页面和后台接口拆分的项目,DB层用的是po 传输层dto 展示层vo

这种设计会有几个问题
1, 做一套CRUD页面的话,bean就要用3个,他们的属性基本一致,涉及到大量的属性拷贝。

2, 前台和接口都依赖于dto层,导致只要dto中数据修改,前台和接口所有的项目都要重新编译。

注: 这里可以做个偷懒 前台层直接用dto对象

改进
将dto剥离出来, dto直接定义在接口层(如果无必要直接将po包装下传出去也ok),前台vo和dto属性一致就ok,不用调用dto代码。
好处
1, 接口和前台不依赖于dto
2, 减少大量属性拷贝
### DTOVOPO 的概念与区别 #### 1. 持久化对象(PO,Persistent Object) 持久化对象是与数据库表直接对应的实体类。它通常用于数据访问层(DAO),其主要职责是封装数据库表的字段,并提供基本的增删改查操作。 - **特点**: - 每个 PO 类通常对应数据库中的一个表。 - 包含与数据库表字段相对应的属性。 - 可能包含一些简单的数据库操作方法,如 `insert`、`update` 和 `delete` 等[^3]。 - **使用场景**: - 数据库交互层中,用于映射数据库表和操作数据库记录。 - 主要用于 DAO 层,负责将数据从数据库读取到内存中,或者将内存中的数据保存到数据库中。 ```java public class UserPO { private Long id; private String name; private Integer age; // Getters and Setters } ``` --- #### 2. 值对象(VO,Value Object) 值对象是一种用于封装业务数据的对象,主要用于业务层和表示层之间的数据传递。它可以是对多个 DTOPO 的组合,以便更好地满足业务需求。 - **特点**: - VO 不直接与数据库表对应。 - 主要用于展示层,将数据以特定格式呈现给用户。 - 可以包含一些简单的业务逻辑或计算逻辑。 - VO 是不可变的,一旦创建就不能修改其状态[^2]。 - **使用场景**: - 在前端与接口层之间传输数据时,VO 通常被用来封装需要展示的数据。 - 当业务逻辑需要将多个数据源的结果组合成一个对象时,可以使用 VO。 ```java public class UserVO { private String displayName; private String roleDescription; // Getters and Setters } ``` --- #### 3. 数据传输对象(DTO,Data Transfer Object) 数据传输对象主要用于系统间的通信,例如客户端与服务器之间的数据传输。它的设计目的是减少网络调用次数,通过一次传输携带尽可能多的数据。 - **特点**: - DTO 不直接与数据库表对应。 - 它可以包含多个对象的属性,通常是多个 POVO 的组合。 - 主要用于远程调用和数据传输,适合在不同层之间传递复杂数据结构。 - **使用场景**: - 接口层向业务层传输数据时,DTO 是常用的选择。 - 当需要将多个业务对象组合成一个对象进行传输时,可以使用 DTO。 ```java public class UserDTO { private Long userId; private String username; private List<String> permissions; // Getters and Setters } ``` --- ### 总结对比 | 特性 | PO (Persistent Object) | VO (Value Object) | DTO (Data Transfer Object) | |--------------|------------------------|-------------------------|----------------------------| | **定义** | 数据库表的映射对象 | 封装业务数据的对象 | 系统间通信的数据传输对象 | | **用途** | 数据访问层 | 展示层或业务层 | 接口层或远程调用 | | **是否与数据库表对应** | 是 | 否 | 否 | | **是否包含业务逻辑** | 否 | 可能包含 | 否 | --- ### 示例代码 以下是一个简单的项目结构示例,展示如何在不同层中使用 POVODTO: ```java // PO: 数据库表映射 public class OrderPO { private Long orderId; private String orderName; private Double orderPrice; // Getters and Setters } // DTO: 接口层传输数据 public class OrderDTO { private Long orderId; private String orderName; private Double orderPrice; private List<String> productNames; // Getters and Setters } // VO: 展示层数据封装 public class OrderVO { private String formattedOrderName; private String totalPrice; // Getters and Setters } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值