首页 > 其他分享 >DO、BO 、DTO 、VO 、 AO、PO 、UID的开发规范

DO、BO 、DTO 、VO 、 AO、PO 、UID的开发规范

时间:2024-11-22 11:45:05浏览次数:3  
标签:DO DTO UID 对象 Object AO PO public

1、简单说明

在软件开发中,特别是在Java和其他面向对象编程语言中,以下几个术语常用于表示不同层次或不同目的的数据传输对象。它们的具体含义如下:

  1. DO (Domain Object): 域对象,表示业务领域中的实体,通常与数据库表一一对应。DO通常包含业务逻辑和行为。

  2. BO (Business Object): 业务对象,表示业务逻辑层中的对象,通常用于处理业务逻辑,可能会包含多个DO的组合。BO关注的是业务规则和流程。

  3. DTO (Data Transfer Object): 数据传输对象,主要用于在不同层之间传输数据,尤其是在网络传输时。DTO通常是简单的对象,包含属性和简单的getter/setter方法,不包含业务逻辑。

  4. VO (Value Object): 值对象,表示一组相关属性的组合,通常是不可变的。VO用于表示一个值的概念,例如货币、日期等,强调属性的组合而不是身份。

  5. AO (Application Object): 应用对象,通常是应用层中的对象,代表应用程序的状态和行为。AO可能会协调多个BO和DO的交互。

  6. PO (Persistent Object): 持久化对象,表示需要持久化到数据库的对象。PO通常与数据库表结构相对应,包含持久化所需的所有字段。

  7. 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 的特点

  1. 协调者: AO 负责在不同的业务对象(BO)和领域对象(DO)之间进行协调。它可以处理复杂的业务逻辑,确保各个组件之间的交互顺畅。

  2. 状态管理: AO 可以维护应用程序的状态信息,例如用户会话、事务状态或其他上下文信息。这种状态管理有助于在应用程序的不同部分之间传递信息。

  3. 业务逻辑: AO 可以包含应用程序级别的业务逻辑,处理跨多个对象的操作。例如,AO 可以实现复杂的业务流程,调用多个 BO 和 DO 来完成一个特定的任务。

  4. 解耦: 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 的用途

  1. 业务流程管理: AO 可以用于管理复杂的业务流程,确保各个组件按照预期的顺序执行。

  2. 状态管理: AO 可以维护应用程序中的状态信息,确保在不同的操作之间保持一致性。

  3. 事务管理: AO 可以协调多个操作,确保在事务内的原子性和一致性。

  4. 用户交互: AO 可以处理用户输入,触发相应的业务逻辑和状态变化。

总结

AO(Application Object)在应用程序架构中充当协调者的角色,负责管理应用程序的状态和行为。通过协调多个业务对象(BO)和领域对象(DO)的交互,AO 可以实现复杂的业务逻辑和流程。它有助于解耦代码,提高可维护性和可扩展性,使开发者能够更清晰地组织应用程序的结构。

3.6 UID 在开发中的使用

对于业务上会使用,普遍是不需要我们自己手动定义UID的(手动定义情况较少),大多数是公司使用的框架封装好的,直接使用即可;或者是公司的公共组件完成了封装,直接统一使用即可。


4、注意点

请不使用使用POJO来命名,POJO是一套规范。

POJO(Plain Old Java Object)是一个简单的 Java 对象,通常用于表示数据。在 Java 编程中,POJO 是一种不依赖于特定框架或库的对象,它不包含任何特定于框架的注释或接口。POJO 主要用于表示数据模型,便于在应用程序中传递和操作数据。

POJO 的特点
  1. 简单性: POJO 通常是简单的 Java 类,包含属性(字段)和相应的 getter 和 setter 方法。它们不包含复杂的逻辑或行为。

  2. 无依赖性: POJO 不依赖于特定的 Java EE 或其他框架。它们可以在任何 Java 应用程序中使用,不受特定环境的限制。

  3. 可序列化: POJO 通常实现 Serializable 接口,以便可以在网络上传输或存储到文件中。

  4. 封装性: POJO 通过私有字段和公共 getter/setter 方法来实现数据封装,保护对象的内部状态。

标签:DO,DTO,UID,对象,Object,AO,PO,public
From: https://blog.csdn.net/m0_70545163/article/details/143874795

相关文章

  • MySQL第一章 dos窗口mysql命令合集(超详细!!!)一篇就够了
    前言:        本章节主要学习MySQL数据库在dos窗口下的基础命令,sql语句等相关知识点,收录于MySQL基础系列,该系列主要讲解MySQL数据库dos命令/sql约束/sql语句/sql连接查询等相关知识点,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标:1连接Mysql1.1连接本机上......
  • 你写文档一般用什么工具?Markdown有用过吗?
    Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,并且能够转换成有效的XHTML(或者HTML)文档。以下是对Markdown的详细介绍:一、Markdown的特点与优势轻量化:Markdown的设计目标是实现文本的快速排版,无需关注复杂的HTML标签,使得文本内容的排版变得简单。易......
  • Windows为文件指定默认应用
    方法一(大多数时候没用):方法二:下载链接:Notepad++6.6.8-x86(密码:hcmy)......
  • 28、undo_1_2(undo参数、undo段、事务)
    关于undo的几个参数:1、undo_management:undo段的管理方式(AUTO)2、undo_retention:一个事务提交以后,事务所对应的undo数据尽量保留900秒查询参数:SQL>showparameterundoNAME TYPE VALUE------------------------------------------------------......
  • 29、undo_2_1(事务槽、延迟块清除、构造CR块、ora-01555)
    事务槽(不同于事务表里面的槽位(这个事务槽在数据块的头部))图解:一个事务开始,要做的事情:第一,事务表里面找槽位(undo段的段头块里有事务表,事务表有槽位,每一个槽位记录一个事务);事务表里的槽位里记录的信息有:1、xid(事务ID):(undo段的段号,段里面的第几个槽(槽号),覆盖数);2、cflag(commitf......
  • window 通过docker安装宝塔
    参考链接:https://blog.csdn.net/qq_29294165/article/details/132731219 window安装宝塔安装步骤拉取Ubuntu镜像并运行容器:dockerrun-it-d--nameubuntu-bt-p8888:8888ubuntu 进入容器dockerexec-itubuntu-btbash更新系统:apt-getupdateapt-ge......
  • docker各种代理设置(3)
    dockerpull的代理设置(dockerdaemonproxy)dockerpull拉取国外的镜像时可能会很慢或者会直接失败,这时需要为dockerpull操作设置代理,或者修改镜像源为国内可访问的镜像源。但是要注意,dockerpull命令只是向dockerdaemon服务发送pull操作请求的,实际执行pull操作的是dockerda......
  • 使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
     一、EventLogAnalyzer简介EventLogAnalyzer是一款功能强大的日志管理和分析工具,它可以收集、分析和报告来自WindowsServer等多种系统的日志信息。其主要目的是帮助系统管理员及时发现安全威胁、性能问题和合规性问题等。 (一)收集日志功能它能够自动收集WindowsServe......
  • Kubernetes集群升级Docker版本
    在Kubernetes集群中,Docker作为容器运行时,对其版本的升级需要格外小心,以免影响集群的正常运行。本文将介绍如何在Kubernetes集群中安全地升级Docker版本。注意事项:请在业务低峰期进行升级,避免影响业务升级后需要重启节点,才能拿到新版本的指标升级步骤1.离线升......
  • Windows 杜比OEM授权
    【声明】CSDN只做转发不做时时更新,最新博客请关注博客园 Windows杜比OEM授权我们中高端的windows笔记本上都可以看到Dolby音效,TV电视上也有支持Dolby显示选项。杜比主要有几类:Dolby全景声(也叫Atmos)、Dolby视界(Vision)、杜比影院(DolbyCinema)作为OEM厂商,如何获取杜比授权呢?......