当前位置: 首页 > news >正文

数据对象:DTO、DO、PO和 BO的区别和关系

在Java开发中,DTO(Data Transfer Object)、DO(Domain Object)、PO(Persistent Object)和BO(Business Object)是常用的数据对象概念,下面为你详细介绍并给出简单示例。

1. DTO(Data Transfer Object)

  • 概念:数据传输对象,主要用于在不同层之间传输数据,比如在前端和后端之间、不同服务之间进行数据传递。它通常不包含业务逻辑,仅作为数据的载体。

  • 作用:减少网络传输的数据量,提高传输效率;同时可以对传输的数据进行封装,方便不同系统间的数据交互。
    来自AI的解释:
    在这里插入图片描述

  • 示例:在一个电商系统中,前端页面需要展示商品的基本信息,后端将商品信息封装成ProductDTO传输给前端。

// ProductDTO.java
public class ProductDTO {
    private Long id;
    private String name;
    private double price;

    public ProductDTO(Long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    // Getters and Setters
    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;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

2. DO(Domain Object)

  • 概念:领域对象,代表领域模型中的业务实体,包含业务逻辑和业务状态。它是对现实世界中业务概念的抽象。
  • 作用:封装业务逻辑,将业务规则和数据紧密结合,提高代码的可维护性和可扩展性。
  • 示例:还是电商系统中的商品,ProductDO除了包含商品的基本信息,还可以有一些业务方法,如计算折扣后的价格。
// ProductDO.java
public class ProductDO {
    private Long id;
    private String name;
    private double price;

    public ProductDO(Long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    // 计算折扣后的价格
    public double calculateDiscountedPrice(double discountRate) {
        return price * (1 - discountRate);
    }

    // Getters and Setters
    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;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

3. PO(Persistent Object)

  • 概念:持久化对象,通常对应数据库中的一张表,用于和数据库进行交互,将数据库中的数据映射到Java对象中。
  • 作用:实现数据的持久化操作,如插入、更新、删除和查询等。
  • 示例:在电商系统中,ProductPO对应数据库中的product表。
// ProductPO.java
import java.sql.Timestamp;

public class ProductPO {
    private Long id;
    private String name;
    private double price;
    private Timestamp createTime;
    private Timestamp updateTime;

    // Getters and Setters
    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;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Timestamp getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Timestamp createTime) {
        this.createTime = createTime;
    }

    public Timestamp getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Timestamp updateTime) {
        this.updateTime = updateTime;
    }
}

4. BO(Business Object)

  • 概念:业务对象,用于封装业务逻辑,处理业务流程。它可以调用多个领域对象或持久化对象来完成复杂的业务操作。
  • 作用:将业务逻辑从表现层和数据访问层中分离出来,提高代码的复用性和可维护性。
  • 示例:在电商系统中,ProductBO可以处理商品的上架、下架等业务逻辑。
// ProductBO.java
import java.sql.Timestamp;

public class ProductBO {
    private ProductDO productDO;
    private ProductPO productPO;

    public ProductBO(ProductDO productDO, ProductPO productPO) {
        this.productDO = productDO;
        this.productPO = productPO;
    }

    // 商品上架业务逻辑
    public void putOnSale() {
        // 更新领域对象状态
        // 这里可以添加更多业务逻辑,如检查库存等
        // 更新持久化对象
        productPO.setCreateTime(new Timestamp(System.currentTimeMillis()));
        productPO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        // 调用数据访问层进行持久化操作
        // 示例中省略具体的数据访问代码
    }

    // 商品下架业务逻辑
    public void takeOffSale() {
        // 更新领域对象状态
        // 更新持久化对象
        productPO.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        // 调用数据访问层进行持久化操作
        // 示例中省略具体的数据访问代码
    }
}

总结

  • DTO:主要用于数据传输,关注数据的传递和展示。
  • DO:代表业务实体,封装业务逻辑和状态。
  • PO:与数据库表对应,用于数据的持久化操作。
  • BO:处理复杂的业务流程,协调多个对象完成业务操作。

这些概念在不同的项目中可能会有不同的使用方式和侧重点,但总体上都是为了提高代码的可维护性、可扩展性和复用性。

相关文章:

  • 用 C++ 写汉诺塔程序
  • 从零开始的编程-java篇1.6.3
  • 医院大数据处理的主要痛点分析
  • 低代码开发平台:飞帆制作网页并集成到自己的网页中
  • 1110+款专业网站应用程序UI界面设计矢量图标figma格式素材 Icon System | 1,100+ Icons Easily Customize
  • FreeRTOS移植笔记:让操作系统在你的硬件上跑起来
  • visual_studio_2022集成SFML
  • IntelliJ IDEA Maven 工具栏消失怎么办?
  • ctf-show-杂项签到题
  • 输入框输入数字且保持精度
  • 【工具变量】全国各省及地级市绿色金融指数数据集(2000-2023年)
  • OpenGL学习笔记(模型材质、光照贴图)
  • 树莓派llama.cpp部署DeepSeek-R1-Distill-Qwen-1.5B
  • Gerapy二次开发:用户管理专栏页面样式与功能设计
  • OpenStack Yoga版安装笔记(十七)安全组笔记
  • 每日c/c++题 备战蓝桥杯(求解三个数的最大公约数与最小公倍数)
  • CANoe CAPL——Ethernet CAPL函数
  • btrfs , ext4 , jfs , xfs , zfs 对比 笔记250406
  • 前端知识-CSS3
  • Java Properties 类详解
  • 建设工程质量协会网站/学网络营销有用吗
  • linux建设视频网站/目前最火的推广平台
  • 推荐一下网站谢谢/方法seo
  • 做网站的属于什么行业/搜索引擎优化排名关键字广告
  • 北京城市雕塑建设管理办公室网站/肇庆网站建设制作
  • 网站流量来源/seo学校