**本文宗旨: 充分利用java面向对象的思想**
一 、常见的对象称呼
1. DTO : 数据传输对象 , 一种设计模式之间传输数据的软件应用程序 , 可以说是对业务层数据操作的对象.
DTO封装 , VO展示 。
2. VO : 与DTO类似 , 用于页面展示用。.
DTO和VO 实现层面是一样的 , 可以当做一个对象 , 但是要注意设计层面是不同的 .
3. DO : 业务逻辑对象 , 注重业务 . DTO属于自定义属性 ,可减少不必要的输出.
3. BO : 业务对象层的缩写 , 调用Dao方法结合po vo进行操作.
4. JavaBean : 一种可重用组件 , 即一次编写 , 任何地方执行 , 任何地方都可重用 .
5. Entity : 持久化实体对象,与数据库对应 。
6. POJO: 简单的java对象 , 实际就是普通的javaBean 。
7. PO : 只含有 get/set 方法的POJO
…
…
二 、DTO 对象的应用
**大家不要只是认为实体对象只能作为在数据库持久化使用 , 往往大家忽略的东西也是很奇妙的 ☺**
比如 : DTO 的数据转换
- 对Json 字符串的操作
String str = ThirdDataReqApiUtil.Api(xxx); // str 是一个Json的字符串
(1) 正常取值
JSONObject linkObject = str.getJSONObject("xxx").getJSONObject("xxx");
***当没有接口文档时,你的操作其他人看了 , 不清楚对象内容
而采用DTO对象 ,其他人看了 , 就会很清晰你所取得内容是什么***
(2) DTO 方式
首先先定义一个DTO实体( ResponseDto)
再使用FastJson对JSON格式字符串转成对象
然后使用时 对象.属性(); 即可获取值
这样定义返回的值能够很清晰的反应出该字符串的内容, 方便大家查看
public class ResponseDto {
boolean success;
String id;
ResultDescDto result_desc;
String nextService;
String reason_code;
String reason_desc;
// 省略get set 方法
}
ResponseDto responseDto=JSONObject.parseObject(retJsonStr, ResponseDto.class);
ResultDescDto resultDescDto=responseDto.getResult_desc();
- 数据间的转换
当entity 实体类不能满足你的业务需求 , 你完全可以重新定义一个DTO实体,用作业务传输 .
(1) 问题剖析
需求 : 对数据操作的过程中 , 我只想使用User对象中的 name 和 ag.e 属性 (正常开发数据量很大).
解决 : 这时 , 我们就可以自定义一个 xxxDto 的实体 进行数据转换.
好处 : 实体 更有 针对性 , 可以根据自己业务需求获取想要的传输对象.
(2) User 类
public class User {
private String id;
private String name;
private String age;
private Person person;
// 省略get set toString 方法
}
(3) Person类
public class Person {
private String personid;
private String name;
private String address;
private String tel;
private String email;
// 省略get set toString 方法
}
(4 ) 测试类
import org.springframework.beans.BeanUtils;
public class Test {
public static void main(String[] args) {
// User对象
User user = new User();
user.setId("520");
user.setName("测试User");
user.setAge("18");
// Person 对象
Person person = new Person();
person.setPersonid("521");
person.setName("测试Person");
person.setAddress("北京");
person.setTel("5201314");
person.setEmail("66.com");
// User里面有一个Person
user.setPerson(person);
// 需求 : 对数据操作的过程中 , 我只想使用User对象中的 name 和 age 属性 (正常开发数据量很大)
// 解决 : 这时 , 我们就可以自定义一个 xxxDto 的实体 进行数据转换
// 定义UserDto 进行数据转换
UserDto userDto = new UserDto();
BeanUtils.copyProperties(user, userDto);
// 这时你想要的数据就在xxxDto中了
System.out.println("User数据 :"+user);
System.out.println("UserDto数据 :"+userDto);
}
}
(5) 输出结果
User数据 :User [id=520, name=测试User, age=18, person=Person [personid=521, name=测试Person, address=北京, tel=5201314, email=66.com]]
UserDto数据 :UserDTO [name=测试User, age=18]
二 、总结
实际开发中,要开散思维,灵活运用现有知识.