* 用于表示数据库中的一条记录,没有任何行为方法; * 遵守 Java Bean 的规范,只拥有 getter/setter 方法; * 可以将一条记录做为一个对象处理,可以方便转化为其他对象。
* 负责持久层操作,通常和 PO 结合使用; * 包含了各种数据库的操作方法,为业务层提供数据库的 CRUD 操作;
* 从现实世界中抽象出来的有形或无形的业务实体。
* 将业务逻辑封装为一个对象,封装了对 DAO、RPC 等的调用; * 可以包含一个或多个其他对象,如一个简历BO,包含教育经历、工作经历、社会关系等 PO/DO 对象 * 可以进行 PO/DO 与 VO/DTO 之间的转换;
* 表示一个数据传输对象; * 通常用于不同服务或服务不同分层之间的数据传输; * 与 VO 概念相似,区别点在于设计理念上,主要用于 API 服务调用。
* 视图对象,用于展示层; * 减少传输数据量大小和保护数据库结构不外泄。
@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 { private 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; } private 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; } }
@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; } }