**本文宗旨:	充分利用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 的数据转换
  1. 对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();
  1. 数据间的转换
    当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]

二 、总结
实际开发中,要开散思维,灵活运用现有知识.