一文说清VO,BO,PO,DO,DTO的使用场景

在 Java 开发中,VO、BO、PO、DO、DTO 和 Entity 是一些常见的命名约定,它们代表了不同的概念和在不同层次中使用的对象类型。下面我将简要介绍它们的区别,并举例说明:

  1. VO(View Object):
  • 区别:用于前端视图展示的对象,通常包含前端需要展示的数据字段。
  • 使用场景:在视图层中使用,将数据传递给前端进行展示。

示例:
在一个电商网站的商品详情页,需要展示商品的基本信息,可以使用一个 ProductVO 对象来封装这些数据,如商品名称、价格、库存等。

public class ProductVO {private String name;private BigDecimal price;private int stock;// 省略 getter 和 setter
}
  1. BO(Business Object):
  • 区别:用于封装业务逻辑的对象,包含了业务逻辑处理所需的数据和处理方法。
  • 使用场景:在业务层中使用,处理业务逻辑并协调各个数据操作。

示例:
在订单处理的业务逻辑中,可以使用一个 OrderBO 对象来处理订单相关的业务,包括创建订单、计算订单金额等。

public class OrderBO {private String orderId;private List<OrderItem> orderItems;public void createOrder() {// 创建订单的业务逻辑}// 省略 getter 和 setter
}
  1. PO(Persistence Object):
  • 区别:持久化对象,对应数据库中的表结构,用于和数据库交互。
  • 使用场景:在数据访问层中使用,与数据库进行交互,进行数据的持久化操作。

示例:
在一个用户管理系统中,可以定义一个 UserPO 对象来映射数据库中的用户表,实现与数据库的交互。

@Entity
@Table(name = "user")
public class UserPO {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;// 省略 getter 和 setter
}
  1. DO(Domain Object):
  • 区别:领域对象,用于表示业务领域中的概念和实体,通常与业务逻辑相关。
  • 使用场景:在领域层中使用,表示业务对象和业务规则。

示例:
在一个社交网络应用中,可以定义一个 UserDO 对象来表示用户的领域对象,在领域层中处理用户相关的业务逻辑。

public class UserDO {private Long id;private String username;private boolean isActive;// 省略 getter 和 setter
}
  1. DTO(Data Transfer Object):
  • 区别:数据传输对象,用于在不同层之间传输数据,避免直接暴露实体对象。
  • 使用场景:在服务层或控制器中使用,用于不同层之间的数据传递。

示例:
在一个用户管理系统中,可以定义一个 UserDTO 对象来封装用户信息,在服务层和控制器中进行数据传输。

public class UserDTO {private Long id;private String username;// 省略 getter 和 setter
}

总结:

VO 主要用于前端视图展示;
BO 包含业务逻辑,处理业务层的操作;
PO 对应数据库表结构,用于和数据库交互;
DO 表示业务领域中的实体,处理业务逻辑;
DTO 用于不同层次间的数据传输;
在 MVC 模式中,VO 和 DTO 通常用于表示视图层和服务层之间的数据传递,BO 和 DO 则用于表示业务逻辑和领域模型。Entity 通常指代 PO,表示持久化对象,用于数据访问层与数据库交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Axure RP制作web页面并实现无公网ip远程访问——“cpolar内网穿透”

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

Vue知识学习

Vue 是什么&#xff1f; 概念&#xff1a;Vue 是一个用于构建用户界面的渐进式框架 Vue 的两种使用方式: ① Vue 核心包开发 场景:局部 模块改造 ② Vue 核心包& Vue插件工程化开发 场景:整站开发 创建Vue 实例&#xff0c;初始化渲染的核心步骤: 1.准备容器 2.引包(官…

基于java在线调查表单系统

基于java在线调查表单系统 一、演示效果二、特性汇总三、下载链接 一、演示效果 二、特性汇总 多种技术方案&#xff0c;满足不同的技术选型需求完善的浏览器兼容、保证传统客户也能正常使用部署简单&#xff0c;一行命令完成部署更新方便&#xff0c;直接替换原安装文件不用担…

F2图例封装 - BarAndLine

基于vue3 和 F2 3.5.0 <template><div :style"{minHeight: ${height}px,width: 100% }" ref"container"><canvas v-show"showChart" ref"canvas" :id"chartId" class"chart-canval"></canva…

【stm32】hal库-双通道ADC采集

【stm32】hal库-双通道ADC采集 CubeMX图形化配置 程序编写 /* USER CODE BEGIN PV */ #define BATCH_DATA_LEN 1 uint32_t dmaDataBuffer[BATCH_DATA_LEN]; /* USER CODE END PV *//* USER CODE BEGIN 2 */lcd_init();lcd_show_str(10, 10, 24, "Demo14_4:ADC1 ADC2 S…

微服务中排除父项目中的某个依赖

微服务中&#xff0c;子项目排除父项目中的某个依赖 在微服务项目中&#xff0c;可以通过使用maven的exclusions标签排除父项目中的某个依赖。具体操作如下&#xff1a; 打开子项目的pom.xml文件。 在子项目的dependency标签中&#xff0c;添加exclusions标签&#xff0c;指定…

Python 实现 BRAR 指标计算(情绪指标):股票技术分析的利器系列(11)

Python 实现 BRAR 指标计算&#xff08;情绪指标&#xff09;&#xff1a;股票技术分析的利器系列&#xff08;11&#xff09; 介绍算法公式 代码rolling函数介绍核心代码计算BR计算AR 完整代码 介绍 BRAR 是一种情绪指标&#xff0c;用于衡量特定金融市场中的买卖情绪。它代表…

牛客周赛34(A-E)

目录 1.A 2.B 3.C 4.D 5.E 这场出题人号称是考思维,把我给搞蒙了,把我这菜鸡实力暴露的淋漓尽致,不过这场还是让我学到了东西.A,B题就是签到题,会语法就能做(doge),c题我知道思路是啥,但我没想到切分出来的偶数也可能爆long long,所以还得用字符串存,自定义cmp比较函数,而我…

关于内容生成及其上下游的一些问题和想法以及SmartChat给出的答复

写在问题前面 下面的一系列问题&#xff0c;是为了要实现问题中所提到的内容而提出的。如果有感兴趣的朋友&#xff0c;让我们一起学习进步。同时&#xff0c;以下代码、架构和实现都是我计划想要完成的&#xff0c;如果有任何一方面有基础又愿意一起实现它们的请留言或私信一…

试一下newb,还是有错误呀

解题&#xff1a;原式&#xff1d; 2. 在递增的等比数列 ( a n ) (a_n) (an​)中&#xff0c;若 ( a 3 − a 1 5 2 ) (a_3 - a_1 \frac{5}{2}) (a3​−a1​25​), ( a 2 3 ) (a_2 3) (a2​3), 则公比 (q) A. ( 4 3 ) ( \frac{4}{3} ) (34​) B. ( 3 2 ) ( \frac{3}{2} …

netcat(nc)下载及基本使用

netcat&#xff08;nc&#xff09;下载及基本使用 - 知乎

旧物回收小程序开发,开启绿色生活新篇章

随着科技的发展和人们生活水平的提高&#xff0c;物质生活的丰富带来了大量的废弃物。如何合理处理这些废弃物&#xff0c;实现资源的再利用&#xff0c;已成为社会关注的焦点。旧物回收小程序的开发与应用&#xff0c;为这一问题提供了有效的解决方案。本文将探讨旧物回收小程…

软考47-上午题-【数据库】-数据查询语言DQL2

一、聚合函数 聚合函数实现数据统计的功能&#xff0c;返回一个单一的值。聚合函数一般与select语句的group by子句一起使用。 示例&#xff1a; 二、数据分组-group by 聚合函数加上group by子句进行分组。 通常一个聚合函数的作用范围是满足where子句中指定条件的记录&…

Atcoder ABC341 C - Takahashi Gets Lost

Takahashi Gets Lost&#xff08;高桥迷路了&#xff09; 时间限制&#xff1a;3s 内存限制&#xff1a;1024MB 【原题地址】 所有图片源自Atcoder&#xff0c;题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【…

vscode输入英文时字体之间的间隔突然变大,似中文

vscode输入英文时字体之间的间隔突然变大&#xff0c;似中文 主要原因&#xff1a; 是由于输入法变成全角模式了。原因可能是不小心按了 shift空格键快捷键造成的。 正常情况&#xff0c;全角就是字母和数字等与汉字占等宽位置的字。 半角就是ASCII方式的字符&#xff0c;在没…

并发编程线程安全性之可见性有序性

可见性 可见性: 就是说一个线程对共享变量的修改&#xff0c;另一个线程能够立刻看到 通俗点说&#xff0c;就是两个线程共享一个变量&#xff0c;无论哪一个线程修改了这个变量&#xff0c;另外一个线程都能够立刻看到上一个线程对这个变量的修改 产生线程安全问题的原因 计…

桶装水配送小程序有什么功能 怎么制作

桶装水配送小程序是一种方便快捷的订水服务工具&#xff0c;可以帮助用户轻松订购桶装水&#xff0c;并实时跟踪订单配送情况。下面具体介绍送水小程序的功能。 1. 客户订水功能&#xff1a;用户可以通过小程序轻松选择需要的桶装水数量和配送时间&#xff0c;填写联系信息和地…

LeetCode 2960.统计已测试设备

给你一个长度为 n 、下标从 0 开始的整数数组 batteryPercentages &#xff0c;表示 n 个设备的电池百分比。 你的任务是按照顺序测试每个设备 i&#xff0c;执行以下测试操作&#xff1a; 如果 batteryPercentages[i] 大于 0&#xff1a; 增加 已测试设备的计数。 将下标在 …

leet hot 100-7 无重复字符的最长子串

无重复字符的最长子串 原题链接思路代码 原题链接 leet hot 100-7 3. 无重复字符的最长子串 思路 声明一个无序map容器&#xff0c;容器里面记录着窗口里面字符的数量 &#xff0c;如果字符的数量大于1 遍历到s[i]的时候 数量1 此时如果map里面相关的数量大于1 说明窗口里面…

ocr识别tesseract.js本地复现

来源&#xff1a; https://github.com/naptha/tesseract.js chatgpt今天帮倒忙&#xff0c;一直给一些旧的东西&#xff0c;代码就老报错&#xff0c;最后还是我出面看看log和err调了一下&#xff0c;还的是我啊 复现效果 这个挺好复现的&#xff0c;用的英文模式比中文识别…