首页 > 编程语言 >一文带你了解 Java 中的 DAO、DTO、PO、SO、BO、VO

一文带你了解 Java 中的 DAO、DTO、PO、SO、BO、VO

时间:2022-10-26 15:08:08浏览次数:44  
标签:DAO DTO 对象 BO SO Java PO

一文带你了解 Java 中的 DAO、DTO、PO、SO、BO、VO

如果您是 Java 开发人员,您可能听说过以下很多首字母缩略词,例如:

  • DTO
  • DAO
  • PO
  • SO
  • BO
  • VO

......你可能对它们的实际含义不太了解。

在这里,在本文中,我将简要解释这些首字母缩写词代表什么以及它们代表什么。

DTO(Data Transfer Object)数据传输对象

这可能是 Java 开发世界中最常见的首字母缩写词。我的意思是,我相信每个人都在某个时候听说过“DTO”这个词。

DTO 基本上代表数据传输对象。这是一种非常常见的软件开发模式,尤其是在 Java 世界中。事实上,许多人认为它起源于企业开发的 Java 世界。

它是一个封装对象,包含要从一个位置传输到另一个位置的数据。DTO刚出现时,主要是用来封装从数据库中取出的数据,作为传递给调用者类的机制。

如今,它更常用于各种地方。从数据层(最初使用的)到 Web 层,人们将其用作请求/响应类型对象,用于在最终用户客户端和 Web 层内的“视图”之间或在用户 API 请求到后端 HTTP RESTful 之间传输数据或非 RESTful Web 服务。

DAO(Data Access Object) 数据访问对象

使用首字母缩写词表示的另一种非常常见的模式是 DAO 模式。

DAO 代表数据访问对象。

与 DTO 类似,DAO 位于数据层,其主要职责是封装数据库访问。

DAO 主要在更传统的企业类 Java 项目中可见。

如今,它在现代软件开发中的使用较少,尤其是在 Java 开发方面。这是因为,现在人们通常使用 Spring Boot 来引导 Java Web 应用程序,而 Spring 的 Spring Data 项目提供了使用Repository 模式来封装数据库访问。

因此,通过使用存储库设计模式,几乎不需要手动编写 DAO,从而使 DAO 变得非常冗余。

PO(Persistant Object)持久对象

PO 代表持久性对象。

在数据层中使用 DAO 和 DTO 的上下文中,您通常还可以使用 PO。

用最简单的术语来说,持久性对象是一个封装要存储到数据库中的数据的对象——因此它的名称为“持久性对象”,因为它是一个应该持久化到底层数据库的对象。一个 PO 的数据结构对应着库中表的结构,表中的一条记录就是一个 PO 对象

老实说,PO 与 DAO 和 DTO 的使用密切相关。虽然 DTO 通常用作存储从数据库检索到的数据的对象,但 PO 是一个相反的对象——如前所述,要持久化到数据库中。

在对象关系映射 (ORM) 领域,您可能遇到过“实体对象”的概念。PO 基本上是一个实体对象。它们通常可以互换使用。PO 里面除了 get,set 之外没有别的方法 ,对于 PO 来说,数量是相对固定的,一定不会超过数据库表的数量 。等同于 Entity,这俩概念是一致的

SO(Service Object) 服务对象

SO 是服务对象。

在典型的分层应用程序架构中,您将拥有 3 个不同的层:

  1. 表示/视图层
  2. 服务/业务层
  3. 数据访问/持久层

Presentation 或 View 层将包含所有负责传入请求接口的“Web”或“Rest”类。

顾名思义,数据访问或持久层只是一个用于封装数据相关逻辑的层,DAO 和 DTO 模式都真正驻留在这一层。

最后,服务层是负责核心业务逻辑的层,因此这是服务对象所在的地方。

服务对象(SO)只是一个封装业务逻辑的对象。

这种 SO 的一个常见示例是服务类。例如 ​​ItemService​

BO(Business Object)业务对象

它是一个包含业务逻辑代码的对象。简而言之,BO 几乎是一个 SO。这只是企业 Java 世界中的一个术语问题。

但是,一些开发人员也在其他地方使用 BO。您可能已经看到包含大量业务逻辑的类,但并没有真正归类为“服务对象”,因为它没有将“服务”层合同暴露给调用 Web 层的 REST 控制器。

这是 BO 与 SO 不同的地方。当您可以将业务逻辑代码放在 SO 中以有效地将 SO 转换为 BO 时,您可以考虑将业务逻辑代码抽象为它自己的类 - BO。并让 SO 本身成为许多单独业务对象的“外观”或“协调者”。

VO(Value Object)值对象

VO 代表值对象。它基本上是一个代表事物“价值”的对象。一般用于web层向view层封装并提供需要展现的数据。

VO 通常是不可变的,这意味着它们一旦创建就不会更改。这使我们能够正确地表示“价值”。由于 VO 意味着易于一次性使用,因此如果您需要不同的“价值”,您可以创建新的 VO。

VO 可以在分层架构中的所有层的任何地方使用,因为它不像 DAO 或 DTO 那样属于单个特定层。

总结

以下是这些术语的快速摘要:

  • DTO——数据传输对象
  • DAO——数据访问对象
  • PO——持久性对象
  • SO——服务对象
  • BO——业务对象
  • VO——值对象

标签:DAO,DTO,对象,BO,SO,Java,PO
From: https://blog.51cto.com/u_14129797/5797917

相关文章

  • Spring Boot 并行任务,这才是优雅的实现方式!
    SpringBoot的定时任务:第一种:把参数配置到.properties文件中:代码:packagecom.accord.task;importjava.text.SimpleDateFormat;importjava.util.Date;importo......
  • 628案例演示开关灯 629 BOM概述
    开关灯案例演示也可以说成是图片之间的切换<body><!--指定图片路径和id名称--><imgsrc="img/off.gif"id="deng"><script>/*......
  • Harbor高可用安装
    业务迁移环境准备1.1迁移概述有了Kuberetes集群环境之后,我们就可以将原来在传统虚拟机上运行的业务,迁移到kubernetes上,让Kubernetes通过容器的方式来管理。而一旦我......
  • JavaScript高级程序设计笔记12 BOM
    BOMBOM的核心——window对象窗口和弹窗location对象——页面信息navigator对象——浏览器信息history对象——浏览器历史记录BOM是使用JavaScript开发Web应用程序的......
  • node接口获取不到req.body
    法1:使用express内置的中间件解决//配置解析请求体数据application/json//它会把解析到的请求体数据放到req.body中app.use(express.json())法2:引入body-parser(2......
  • 案例_轮播图、BOM_Window属性
    案例_轮播图<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>轮播图</title></head><body><!--图片--><imgid="img"src="im......
  • 基于springboot+vue商品推荐管理系统的设计与实现(源码调试+讲解+文档)
    ......
  • 部署spingboot项目到云服务器踩坑记录
    按教程部署mall电商系统https://www.macrozheng.com/mall/deploy/mall_deploy_docker.html#docker环境安装只记录SpringBoot应用部署这部分一、本地电脑安装maven官......
  • 【CSS3】border-color
     border-color值描述border-top-color边框的上面border-right-color边框的右面border-bottom-color边框的下面border-left-color边框的左面......
  • 【CSS3】border-image
     border-image值描述border-image-source 指定border的背景图的urlborder-image-slice设置图片如何切割的属性,非定位border-image-width定义border-ima......