java do po dto_Java 中 DO、PO、BO、DTO、VO 等各对象概念说明

一、各对象说明

1.1 PO(persistant object) 持久对象

* 用于表示数据库中的一条记录,没有任何行为方法;

* 遵守 Java Bean 的规范,只拥有 getter/setter 方法;

* 可以将一条记录做为一个对象处理,可以方便转化为其他对象。

1.2 DAO(Data Access Object ) 数据访问对象

* 负责持久层操作,通常和 PO 结合使用;

* 包含了各种数据库的操作方法,为业务层提供数据库的 CRUD 操作;

1.3 DO(Domain Object) 领域对象

* 从现实世界中抽象出来的有形或无形的业务实体。

1.4 BO(business object) 业务对象

* 将业务逻辑封装为一个对象,封装了对 DAO、RPC 等的调用;

* 可以包含一个或多个其他对象,如一个简历BO,包含教育经历、工作经历、社会关系等 PO/DO 对象

* 可以进行 PO/DO 与 VO/DTO 之间的转换;

1.5 DTO(Data Transfer Object)数据传输对象

* 表示一个数据传输对象;

* 通常用于不同服务或服务不同分层之间的数据传输;

* 与 VO 概念相似,区别点在于设计理念上,主要用于 API 服务调用。

1.6 VO(view object) 值对象

* 视图对象,用于展示层;

* 减少传输数据量大小和保护数据库结构不外泄。

二、对象转换

2.1 DO/BO 与 PO 之间的转换

@Getter

@Setter

public class OrderPO {

private String orderId;

private String orderName;

private String creator;

private Date createTime;

private String modifier;

private Date modifyTime;

}

@Getter

@Setter

public class Order {

private String orderId;

private String orderName;

private String creator;

private Date createTime;

}

通过工厂模式封装转换逻辑,工厂与仓储模式往往结对出现,应用于数据的初始化和持久化两类场景。

public class OrderFactory {

public OrderPO createOrderPO(Order order, UserDTO userDTO) {

OrderPO orderPO = new OrderPO();

orderPO.setOrderId(order.getOrderId());

orderPO.setOrderName(order.getOrderName());

orderPO.setCreator(order.getCreator());

orderPO.setCreateTime(order.getCreateTime());

orderPO.setModifier(userDTO.getUserName());

orderPO.setModifyTime(new Date());

return orderPO;

}

public Order getOrder(OrderPO orderPO) {

Order order = new Order();

order.setOrderId(orderPO.getOrderId());

order.setOrderName(orderPO.getOrderName());

order.setCreator(orderPO.getCreator());

order.setCreateTime(orderPO.getCreateTime());

return order;

}

}

2.2 DO/BO 与 DTO/VO 之间的转换

@Getter

@Setter

public class OrderDTO {

private String orderId;

private String orderName;

private String creator;

private Date createTime;

}

@Getter

@Setter

public class OrderVO {

private String orderId;

private String orderName;

private String creator;

private Date createTime;

}

通过 组装类(Assembler) 负责将应用服务返回的多个 DO/BO 对象组装为前端 DTO /VO 对象,或将前端请求的 DTO 对象转换为多个 DO/BO 对象,供应用服务作为参数使用。组装类中不应有业务逻辑,主要负责格式转换、字段映射等。Assembler 往往与 DTO 同时存在。

public class OrderAssembler {

public static OrderVO toVO(Order order) {

OrderVO orderVO = new OrderVO();

orderVO.setOrderId(order.getOrderId());

orderVO.setOrderName(order.getOrderName());

orderVO.setCreator(order.getCreator());

orderVO.setCreateTime(order.getCreateTime());

return orderVO;

}

public static OrderDTO toDTO(Order order) {

OrderDTO orderDTO = new OrderDTO();

orderDTO.setOrderId(order.getOrderId());

orderDTO.setOrderName(order.getOrderName());

orderDTO.setCreator(order.getCreator());

orderDTO.setCreateTime(order.getCreateTime());

return orderDTO;

}

public static Order toDO(OrderDTO orderDTO) {

Order order = new Order();

order.setOrderId(orderDTO.getOrderId());

order.setOrderName(orderDTO.getOrderName());

order.setCreator(orderDTO.getCreator());

order.setCreateTime(orderDTO.getCreateTime());

return order;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值