一文带你了解 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 个不同的层:
- 表示/视图层
- 服务/业务层
- 数据访问/持久层
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——值对象