Java 常见对象模型
# Java 常见对象模型
# 1. DTO(Data Transfer Object)数据传输对象
DTO 主要用于展示层与服务层之间的数据传输,通常用于接收前端请求的数据。它的主要作用是封装与业务逻辑无关的数据传输操作。以下是一个 SpringMVC 中典型的 DTO 使用示例。
// 用户登录接口控制器
@RestController
public class UserController {
/**
* 用户登录接口
* @param userDTO 包含前端传入的用户名和密码
* @return 返回用户名和密码的组合字符串(仅用于示例)
*/
@GetMapping("/login")
public String login(UserDTO userDTO) {
// 从 DTO 中获取前端传递的用户名和密码
String username = userDTO.getUsername();
String password = userDTO.getPassword();
// 返回组合结果
return username + " : " + password;
}
}
// 用户数据传输对象(DTO)
public class UserDTO {
// 用户名
private String username;
// 密码
private String password;
// Getter 和 Setter 方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
关键点:
- DTO 的作用:封装请求参数,用于前后端数据传输,避免将复杂的业务逻辑暴露给前端。
- 规范化使用:即使接收和返回的数据一致,也建议将输入和输出数据分别封装成 DTO 和 VO,确保代码的规范性与可维护性。
# 2. VO(Value Object / View Object)视图对象
VO 通常用于表示与页面视图相关的数据,作为控制器返回的响应数据对象。它的主要作用是封装业务处理后的数据并返回给前端。
// 用户登录接口控制器
@RestController
public class UserController {
/**
* 用户登录接口返回示例
* @return 返回封装后的用户信息对象
*/
@GetMapping("/login")
public UserVO login() {
// 创建并封装用户数据
UserVO userVO = new UserVO();
userVO.setUsername("admin");
userVO.setPassword("admin1234");
// 返回封装的用户信息
return userVO;
}
}
// 用户视图对象(VO)
public class UserVO {
// 用户名
private String username;
// 密码
private String password;
// Getter 和 Setter 方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
关键点:
- VO 的作用:封装业务逻辑处理后的数据,并返回给前端,只包含前端所需的字段,避免数据泄露。
- 与 DTO 的区别:DTO 负责接收请求参数,VO 负责返回响应数据。DTO 和 VO 的字段可以不一致。
# 3. PO(Persistant Object)持久化对象
PO 是与数据库表一一映射的对象,通常用于表示数据库中的记录。它的字段与数据库表中的字段直接对应。
// 数据库用户表的持久化对象(PO)
public class User {
// 用户名,对应数据库的 username 字段
private String username;
// 密码,对应数据库的 password 字段
private String password;
// 状态,对应数据库的 status 字段
private Integer status;
// Getter 和 Setter 方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
关键点:
- PO 的作用:与数据库表形成映射关系,通常与持久层操作结合使用。
- 字段限制:PO 的字段应与数据库表的字段保持一致,避免过多的自定义逻辑。
# 4. BO(Business Object)业务对象
BO 封装了业务逻辑,通常包含多个 PO 和相关业务逻辑。BO 的作用是为业务服务,提供更高层次的封装。
// 用户业务对象(BO)
public class UserBO {
// 用户名
private String username;
// 密码
private String password;
// 业务计算字段:用户状态(假设是通过业务逻辑计算得到的值)
private String status;
// Getter 和 Setter 方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
/**
* 业务逻辑方法:通过业务规则计算用户状态
*/
public void calculateStatus() {
if ("admin".equals(this.username)) {
this.status = "管理员";
} else {
this.status = "普通用户";
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
关键点:
- BO 的作用:封装业务逻辑和数据,通常用于业务层之间的数据传递和业务计算。
- 与 DTO 的区别:BO 包含更多业务相关的逻辑,而 DTO 仅用于数据传输,不涉及复杂的业务逻辑。
# 5. DO(Domain Object)领域对象
DO 通常是领域模型中的对象,可以是 PO 或者 BO。它是对现实业务实体的抽象。
// 领域对象(与 PO 类似)
public class UserDO {
private String username;
private String password;
private Integer status;
// Getter 和 Setter 方法...
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
关键点:
- DO 的作用:领域层中用于表示业务实体的对象,可能与数据库表一一映射(如 PO),也可能是抽象的业务模型(如 BO)。
# 6. TO(Transfer Object)传输对象
TO 通常用于应用程序之间的数据传输,例如在微服务架构中,服务之间通过 TO 进行数据传输。
// 微服务之间的数据传输对象(TO)
public class OrderTO {
private String orderId;
private String productName;
private Integer quantity;
// Getter 和 Setter 方法...
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
关键点:
- TO 的作用:在不同应用程序之间传输数据,特别是在微服务架构中。
- 与 DTO 的区别:DTO 通常用于前后端交互,而 TO 用于服务之间的交互。
# 7. POJO(Plain Ordinary Java Object)简单无规则 Java 对象
POJO 是指不依赖于任何框架或库的简单 Java 对象,通常只包含属性和 Getter/Setter 方法。
// 简单 POJO
public class UserPOJO {
private String username;
private String password;
// Getter 和 Setter 方法...
}
1
2
3
4
5
6
7
2
3
4
5
6
7
关键点:
- POJO 的作用:作为简单的数据容器,没有复杂的业务逻辑。
- 应用场景:POJO 是所有上述对象类型的基础,DO、DTO、VO、BO 等都可以看作是 POJO 的具体化。
# 8. DAO(Data Access Object)数据访问对象
DAO 是数据访问层的对象,专门用于与数据库交互。它通常与 PO 结合使用,通过数据库操作方法访问数据。
// 用户数据访问对象(DAO)
public interface UserDAO {
/**
* 根据用户名查询用户信息
* @param username 用户名
* @return 对应的用户对象
*/
User findByUsername(String username);
/**
* 插入新用户
* @param user 用户对象
* @return 插入结果
*/
int insertUser(User user);
/**
* 更新用户信息
* @param user 用户对象
* @return 更新结果
*/
int updateUser(User user);
/**
* 删除用户
* @param username 用户名
* @return 删除结果
*/
int deleteUser(String username);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
关键点:
- DAO 的作用:为业务层提供数据访问接口,负责与数据库的交互操作。
- 与 PO 的关系:DAO 通常通过 PO 进行数据库的 CRUD 操作。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08