Java 中 DO、PO、BO、DTO、VO 等各对象概念说明
时间:2020-04-20
本文章向大家介绍Java 中 DO、PO、BO、DTO、VO 等各对象概念说明,主要包括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 {
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;
}
}
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;
}
}
原文地址:https://www.cnblogs.com/markLogZhu/p/12736061.html
- oracle 12c 常见报告获取-AWR
- 人人公司收购美国卡车社区 Trucker Path,未来或探索无人驾驶
- WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[下篇]
- 《WCF的绑定模型》博文系列汇总[共6篇]
- 快来看看难民营里的高科技超市
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[中篇]
- 如何通过自定义MessageFilter的方式利用按键方式操作控件滚动条[附源代码]
- WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)
- 《WCF技术剖析》博文系列汇总[持续更新中]
- 关于服务器的运行寿命 你应该知道这些事
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[下篇]
- WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
- 树大招风:细数2017年加密货币市场的幺蛾子事件
- 如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- laravel框架模型、视图与控制器简单操作示例
- Laravel关系模型指定条件查询方法
- 在laravel中使用with实现动态添加where条件
- laravel Model 执行事务的实现
- 在laravel中实现事务回滚的方法
- thinkphp5框架实现数据库读取的数据转换成json格式示例
- phpfpm的作用和用法
- 浅谈PHP5.6 与 PHP7.0 区别
- laravel执行php artisan migrate报错的解决方法
- Laravel统计一段时间间隔的数据方法
- laravel withCount 统计关联数量的方法
- 使用laravel和ECharts实现折线图效果的例子
- Laravel 将数据表的数据导出,并生成seeds种子文件的方法
- Laravel Eloquent ORM 多条件查询的例子
- laravel5.5添加echarts实现画图功能的方法