Java 开发 DO / BO / DTO / VO / AO 的作用
Java 开发中,DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object) 和 AO(Application Object) 是常用的对象类型,每种类型都在特定的层次和场景中发挥不同的作用。以下是它们的定义和使用场景:
1. DO(Data Object,数据对象)
作用:
- 直接与数据库中的表结构对应的对象,用来传递数据。
- 通常是 DAO 层直接操作的对象。
特征:
- 一般是持久化对象。
- 每个属性通常映射到数据库表中的字段。
示例:
public class UserDO {private Long id;private String username;private String password;private Date createTime;// getter & setter
}
场景:
- 作为持久层(DAO)的数据模型,与数据库打交道。
2. BO(Business Object,业务对象)
作用:
- 封装业务逻辑的对象,用于 Service 层处理具体业务。
- 可能会聚合多个 DO,也可能与 DTO 或其他对象结合。
特征:
- 包含业务逻辑(方法),不仅是简单的属性数据。
示例:
public class UserBO {private Long id;private String username;private String displayName;// 业务逻辑方法public boolean isAccountActive() {// 判断账户是否活跃return true;}// getter & setter
}
场景:
- 在业务层(Service)内传递数据、调用方法。
3. DTO(Data Transfer Object,数据传输对象)
作用:
- 用于跨层传递数据,特别是远程调用或接口间传递时。
- 主要用于减少一次传输的数据量。
特征:
- 通常是用于接口的输入输出数据,包含需要传递的最小数据集合。
- 不包含业务逻辑,只有字段和 getter/setter 方法。
示例:
public class UserDTO {private String username;private String email;// getter & setter
}
场景:
- Controller 层调用 Service 层,或者 API 返回响应时使用。
4. VO(View Object,视图对象)
作用:
- 用于前端展示的对象,通常和页面的字段一一对应。
- 是 Controller 层到前端的专用对象。
特征:
- 和界面密切相关,可能包含计算后的字段或格式化数据。
- 只负责展示,不包含业务逻辑。
示例:
public class UserVO {private String username;private String displayName;private String formattedCreateTime;// getter & setter
}
场景:
- Controller 层返回给前端的数据。
5. AO(Application Object,应用对象)
作用:
- 表示接口层的请求数据,主要用于接收用户输入。
- 和 DTO 类似,但更专注于应用层的参数封装。
特征:
- 通常是接口的入参对象。
示例:
public class UserAO {private String username;private String password;// getter & setter
}
场景:
- 接口调用时,用于接收客户端的输入数据。
总结对比表
类型 | 中文名称 | 作用 | 使用场景 |
---|---|---|---|
DO | 数据对象 | 数据库实体对象,与表结构对应 | DAO 层与数据库直接交互 |
BO | 业务对象 | 封装业务逻辑 | Service 层处理具体业务逻辑 |
DTO | 数据传输对象 | 数据传输时的对象,用于跨层或远程调用传递数据 | Controller 层与 Service 层或 RPC API 交互 |
VO | 视图对象 | 前端展示的数据对象,通常和界面字段对应 | Controller 层返回前端的数据 |
AO | 应用对象 | 接收接口请求参数的对象,用于封装输入 | 接口调用时接收客户端输入 |
类比总结
- DO 像数据库里的“记录”。
- BO 像商店里包装好的“商品”,有内容也有业务逻辑。
- DTO 像传输数据时的“快递包裹”,装着数据要跨层或远程发送。
- VO 像展示数据时的“商品展示模型”,让用户直接看到的数据。
- AO 像填写快递时的“表单”,专门用来接收用户的输入。
每种对象类型关注的层次和职责不同,因此在项目中合理区分这些对象可以有效提高代码的可维护性和清晰度。