在讲解DTO,DO,BO,VO这些对象前首先要了解以下POJO
POJO(Plain Ordinary Java Objects):简单无规则 java 对象
POJO对象主要是用于维护数据库表记录,其中有一些属性及其getter setter方法的类,但不允许有业务方法,也不能携带有connection之类的方法。
以下举个POJO的例子:
package pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String name;
private String gender;
private Integer age;
private Double score;
private Date create_time;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + ", score=" + score
+ ", create_time=" + create_time + "]";
}
public User() {}
public User(String name, String gender, Integer age, Double score) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.score = score;
}
}
从代码中也可以看出POJO就一个普通的JavaBean,通过get和set方法存取数据记录。
接下来介绍DTO,DO,BO,VO
POJO可以看着是VO、BO、DTO、DO的抽象总称
DTO( Data Transfer Object):数据传输对象
DTO是来绑定表现层中的数据,与实体Entity不同,DTO是指数据在页面和业务层逻辑,比如当客户在页面提交了表单后,业务层先为这个数据构造了一个DTO对象,然后业务方法内部将DTO对象转为实体对象,然后通过这个实体对象去调用数据库的信息。从这个过程可以看出DTO对象是处理显示层和业务层的数据传递,Entity对象是处理业务层和数据库之间的数据传递。
DO( Data Object):领域对象
DO是从现实世界中抽象出来的有形或无形的业务实体,它与DTO不同,DTO是处理数据在页面与业务层之间的流动,而DO像是在业务层里给用户分角色,将用户角色的权限和用户的信息封装。
BO( Business Object):业务对象
将数据通过一定的业务逻辑进行展示的业务逻辑展现层,主要作用是把业务逻辑封装为一个对象,这个对象可以包括一个或多个其他的对象。其中包含了业务方法和业务属性,在处理业务时就可以针对BO去处理业务。
VO( View Object):视图对象
于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,两个都是POJO,这个是在实现层面上,对于设计层面来说,概念上还是应该存在VO和DTO,因为两者有着本质的区别,DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。在需求明确,客户端只有一个的时候是没有必要将VO和DTO分开的,而在不明确而且一个展示页面可能需要多个DTO的数据组成时就可以考虑用上VO。总的来说VO主要体现在视图的对象,对于一个WEB页面将整个页面的属性封装成一个对象。然后用一个VO对象在控制层与视图层进行传输交换。