1、简单说明
在软件开发中,特别是在Java和其他面向对象编程语言中,以下几个术语常用于表示不同层次或不同目的的数据传输对象。它们的具体含义如下:
-
DO (Domain Object): 域对象,表示业务领域中的实体,通常与数据库表一一对应。DO通常包含业务逻辑和行为。
-
BO (Business Object): 业务对象,表示业务逻辑层中的对象,通常用于处理业务逻辑,可能会包含多个DO的组合。BO关注的是业务规则和流程。
-
DTO (Data Transfer Object): 数据传输对象,主要用于在不同层之间传输数据,尤其是在网络传输时。DTO通常是简单的对象,包含属性和简单的getter/setter方法,不包含业务逻辑。
-
VO (Value Object): 值对象,表示一组相关属性的组合,通常是不可变的。VO用于表示一个值的概念,例如货币、日期等,强调属性的组合而不是身份。
-
AO (Application Object): 应用对象,通常是应用层中的对象,代表应用程序的状态和行为。AO可能会协调多个BO和DO的交互。
-
PO (Persistent Object): 持久化对象,表示需要持久化到数据库的对象。PO通常与数据库表结构相对应,包含持久化所需的所有字段。
-
UID (Unique Identifier): 唯一标识符,通常用于唯一标识某个对象或记录。UID可以是数据库中的主键或其他唯一性约束。
这些术语在软件架构中起着重要作用,帮助开发者理解不同层次和不同类型对象的职责和用途。在命名时,虽然类名通常使用UpperCamelCase风格,但这些特定的术语由于其广泛使用和约定俗成,通常会以大写字母缩写的形式出现。
2、具体使用
2.1 DO (Domain Object)
定义: 域对象是表示业务领域中的实体,通常与数据库表一一对应。它们包含业务逻辑和行为。
示例:
public class UserDO {
private Long id;
private String name;
private String email;
// Constructors, Getters, and Setters
public UserDO(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
// Other getters and setters...
}
2.2 BO (Business Object)
定义: 业务对象用于处理业务逻辑,可能会包含多个DO的组合。
示例:
public class UserBO {
private UserDO userDO;
public UserBO(UserDO userDO) {
this.userDO = userDO;
}
public void changeEmail(String newEmail) {
// Business logic to change email
userDO.setEmail(newEmail);
}
public UserDO getUserDO() {
return userDO;
}
}
2.3 DTO (Data Transfer Object)
定义: 数据传输对象主要用于在不同层之间传输数据,尤其是在网络传输时。DTO通常是简单的对象,不包含业务逻辑。
示例:
public class UserDTO {
private Long id;
private String name;
// Constructors, Getters, and Setters
public UserDTO(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.4 VO (Value Object)
定义: 值对象表示一组相关属性的组合,通常是不可变的。
示例:
public class MoneyVO {
private final double amount;
private final String currency;
public MoneyVO(double amount, String currency) {
this.amount = amount;
this.currency = currency;
}
public double getAmount() {
return amount;
}
public String getCurrency() {
return currency;
}
}
2.5 AO (Application Object)
定义: 应用对象代表应用程序的状态和行为,可能会协调多个BO和DO的交互。
示例:
public class UserAO {
private UserBO userBO;
public UserAO(UserBO userBO) {
this.userBO = userBO;
}
public void updateUserEmail(String newEmail) {
userBO.changeEmail(newEmail);
// Additional application logic can be added here
}
}
2.6 PO (Persistent Object)
定义: 持久化对象表示需要持久化到数据库的对象,通常与数据库表结构相对应。
示例:
public class UserPO {
private Long id;
private String name;
private String email;
// Constructors, Getters, and Setters
public UserPO(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Other getters and setters...
}
2.7 UID (Unique Identifier)
定义: 唯一标识符用于唯一标识某个对象或记录。
示例:
public class UniqueIdentifier {
private final String uid;
public UniqueIdentifier(String uid) {
this.uid = uid;
}
public String getUid() {
return uid;
}
}
3、注意使用
3.1 DO或PO 在开发中的使用
DO和PO在使用过程中是有区别的,但是本人在开发过程中,也有部分使用过DO和PO的情况,DO和PO都是标识数据库表结构一一对应的关系,这是java对象中的属性与数据库表的字段统一维护映射的关系,在项目中,都会有统一的规范,使用DO表示数据库表,就不会再使用PO再来表示数据库表的关系了(不同的公司有不同的规范,可能定义是一样的,在开发的过程中也会有Entity来表示数据库表的关系)
PO(Persistent Object)和DO(Domain Object)在软件开发中有一些相似之处,但它们的目的和使用场景有所不同。以下是它们之间的主要区别:
定义
DO (Domain Object): 域对象代表业务领域中的实体,通常与业务逻辑紧密相关。它们包含与业务相关的属性和行为,通常用于表示业务模型。
PO (Persistent Object): 持久化对象是特定于数据持久化的对象,通常与数据库中的表结构直接对应。PO主要用于与数据库交互,负责存储和检索数据。
关注点
DO: 主要关注业务逻辑和领域模型。DO可能会包含一些业务规则和行为,反映业务的真实情况。
PO: 主要关注数据的持久化和存储。PO通常是简单的数据结构,包含可以直接映射到数据库表的字段。
业务逻辑
DO: 可以包含业务逻辑,例如验证、计算等。DO通常是业务层的核心,负责处理与业务相关的操作。
PO: 通常不包含业务逻辑。PO的主要职责是表示数据库中的数据,通常只包含字段和相应的getter/setter方法。
生命周期
DO: 在应用程序的生命周期中,DO可能会经历多个状态变化,随着业务逻辑的执行而变化。
PO: PO的生命周期主要与数据存储相关,通常在创建、读取、更新和删除(CRUD)操作中使用。
总结
- DO 代表业务领域中的实体,包含业务逻辑和行为。
- PO 代表需要持久化到数据库的对象,主要用于数据存储和检索。
在实际应用中,DO和PO之间可以通过转换(例如,DTO)来实现数据的传递和转化,以便在不同层之间进行交互。这样可以保持业务逻辑与数据存储的清晰分离,提高代码的可维护性和可扩展性。
3.2 BO 在开发中的使用
BO在开发过程中的话,对于连表查询或子查询、以及一些视图中会使用到,用于存储返回的数据集(对应着多个DO)
3.3 DTO 在开发中的使用
DTO的使用,统一是前端请求后端的入参(java对象,易维护和易扩展,也方便复用)
3.4 VO 在开发中的使用
VO的使用,统一是后端处理好的数据响应给前端的出参(java对象,易维护和易扩展,也方便复用)
3.5 AO 在开发中的使用
之前只是看到过旧系统和一些二开的系统上有使用,涉及不是很多。
AO(Application Object) 是一种设计模式,用于表示应用程序的状态和行为。它通常用于协调多个业务对象(BO,Business Object)和领域对象(DO,Domain Object)之间的交互。AO 作为一个中介者,负责管理应用程序的流程、状态和业务逻辑的执行。
AO 的特点
协调者: AO 负责在不同的业务对象(BO)和领域对象(DO)之间进行协调。它可以处理复杂的业务逻辑,确保各个组件之间的交互顺畅。
状态管理: AO 可以维护应用程序的状态信息,例如用户会话、事务状态或其他上下文信息。这种状态管理有助于在应用程序的不同部分之间传递信息。
业务逻辑: AO 可以包含应用程序级别的业务逻辑,处理跨多个对象的操作。例如,AO 可以实现复杂的业务流程,调用多个 BO 和 DO 来完成一个特定的任务。
解耦: AO 有助于解耦业务逻辑与具体的实现细节。通过使用 AO,开发者可以更清晰地组织代码,使其更易于维护和扩展。
AO 的结构
一个典型的 AO 结构可能包含以下几个部分:
- 属性: 存储应用程序的状态信息,例如当前用户、会话信息等。
- 方法: 实现应用程序的主要业务逻辑,调用 BO 和 DO 的方法来完成任务。
- 事件处理: 处理用户输入或系统事件,触发相应的业务逻辑。
示例
以下是一个简单的 AO 示例,展示了如何协调多个 BO 和 DO 的交互:
public class OrderAO { private OrderBO orderBO; // 业务对象 private InventoryBO inventoryBO; // 业务对象 private UserDO user; // 域对象 public OrderAO(OrderBO orderBO, InventoryBO inventoryBO, UserDO user) { this.orderBO = orderBO; this.inventoryBO = inventoryBO; this.user = user; } public void placeOrder(Order order) { // 检查库存 if (inventoryBO.checkAvailability(order)) { // 创建订单 orderBO.createOrder(order, user); // 更新库存 inventoryBO.updateInventory(order); System.out.println("Order placed successfully."); } else { System.out.println("Order cannot be placed due to insufficient inventory."); } } }
AO 的用途
业务流程管理: AO 可以用于管理复杂的业务流程,确保各个组件按照预期的顺序执行。
状态管理: AO 可以维护应用程序中的状态信息,确保在不同的操作之间保持一致性。
事务管理: AO 可以协调多个操作,确保在事务内的原子性和一致性。
用户交互: AO 可以处理用户输入,触发相应的业务逻辑和状态变化。
总结
AO(Application Object)在应用程序架构中充当协调者的角色,负责管理应用程序的状态和行为。通过协调多个业务对象(BO)和领域对象(DO)的交互,AO 可以实现复杂的业务逻辑和流程。它有助于解耦代码,提高可维护性和可扩展性,使开发者能够更清晰地组织应用程序的结构。
3.6 UID 在开发中的使用
对于业务上会使用,普遍是不需要我们自己手动定义UID的(手动定义情况较少),大多数是公司使用的框架封装好的,直接使用即可;或者是公司的公共组件完成了封装,直接统一使用即可。
4、注意点
请不使用使用POJO来命名,POJO是一套规范。
标签:DO,DTO,UID,对象,Object,AO,PO,public From: https://blog.csdn.net/m0_70545163/article/details/143874795POJO(Plain Old Java Object)是一个简单的 Java 对象,通常用于表示数据。在 Java 编程中,POJO 是一种不依赖于特定框架或库的对象,它不包含任何特定于框架的注释或接口。POJO 主要用于表示数据模型,便于在应用程序中传递和操作数据。
POJO 的特点
简单性: POJO 通常是简单的 Java 类,包含属性(字段)和相应的 getter 和 setter 方法。它们不包含复杂的逻辑或行为。
无依赖性: POJO 不依赖于特定的 Java EE 或其他框架。它们可以在任何 Java 应用程序中使用,不受特定环境的限制。
可序列化: POJO 通常实现
Serializable
接口,以便可以在网络上传输或存储到文件中。封装性: POJO 通过私有字段和公共 getter/setter 方法来实现数据封装,保护对象的内部状态。