Java编程规范-DO / BO / DTO / VO / AO的使用

news/2024/12/26 21:31:54/文章来源:https://www.cnblogs.com/aeolian/p/18629385

Java 开发 DO / BO / DTO / VO / AO 的作用

Java 开发中,DO(Data Object)BO(Business Object)DTO(Data Transfer Object)VO(View Object)AO(Application Object) 是常用的对象类型,每种类型都在特定的层次和场景中发挥不同的作用。以下是它们的定义和使用场景:


1. DO(Data Object,数据对象)

作用:

  • 直接与数据库中的表结构对应的对象,用来传递数据。
  • 通常是 DAO 层直接操作的对象。

特征:

  • 一般是持久化对象。
  • 每个属性通常映射到数据库表中的字段。

示例:

public class UserDO {private Long id;private String username;private String password;private Date createTime;// getter & setter
}

场景:

  • 作为持久层(DAO)的数据模型,与数据库打交道。

2. BO(Business Object,业务对象)

作用:

  • 封装业务逻辑的对象,用于 Service 层处理具体业务。
  • 可能会聚合多个 DO,也可能与 DTO 或其他对象结合。

特征:

  • 包含业务逻辑(方法),不仅是简单的属性数据。

示例:

public class UserBO {private Long id;private String username;private String displayName;// 业务逻辑方法public boolean isAccountActive() {// 判断账户是否活跃return true;}// getter & setter
}

场景:

  • 在业务层(Service)内传递数据、调用方法。

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

作用:

  • 用于跨层传递数据,特别是远程调用或接口间传递时。
  • 主要用于减少一次传输的数据量。

特征:

  • 通常是用于接口的输入输出数据,包含需要传递的最小数据集合。
  • 不包含业务逻辑,只有字段和 getter/setter 方法。

示例:

public class UserDTO {private String username;private String email;// getter & setter
}

场景:

  • Controller 层调用 Service 层,或者 API 返回响应时使用。

4. VO(View Object,视图对象)

作用:

  • 用于前端展示的对象,通常和页面的字段一一对应。
  • 是 Controller 层到前端的专用对象。

特征:

  • 和界面密切相关,可能包含计算后的字段或格式化数据。
  • 只负责展示,不包含业务逻辑。

示例:

public class UserVO {private String username;private String displayName;private String formattedCreateTime;// getter & setter
}

场景:

  • Controller 层返回给前端的数据。

5. AO(Application Object,应用对象)

作用:

  • 表示接口层的请求数据,主要用于接收用户输入。
  • 和 DTO 类似,但更专注于应用层的参数封装。

特征:

  • 通常是接口的入参对象。

示例:

public class UserAO {private String username;private String password;// getter & setter
}

场景:

  • 接口调用时,用于接收客户端的输入数据。

总结对比表

类型 中文名称 作用 使用场景
DO 数据对象 数据库实体对象,与表结构对应 DAO 层与数据库直接交互
BO 业务对象 封装业务逻辑 Service 层处理具体业务逻辑
DTO 数据传输对象 数据传输时的对象,用于跨层或远程调用传递数据 Controller 层与 Service 层或 RPC API 交互
VO 视图对象 前端展示的数据对象,通常和界面字段对应 Controller 层返回前端的数据
AO 应用对象 接收接口请求参数的对象,用于封装输入 接口调用时接收客户端输入

类比总结

  • DO 像数据库里的“记录”。
  • BO 像商店里包装好的“商品”,有内容也有业务逻辑。
  • DTO 像传输数据时的“快递包裹”,装着数据要跨层或远程发送。
  • VO 像展示数据时的“商品展示模型”,让用户直接看到的数据。
  • AO 像填写快递时的“表单”,专门用来接收用户的输入。

每种对象类型关注的层次和职责不同,因此在项目中合理区分这些对象可以有效提高代码的可维护性和清晰度。

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

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

相关文章

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

前言一个12V转5V、3.3V和4V的电源电路设计好了,下一步导出BOM表,二次核对元器件型号封装,这是可以生产前的最后一步了。 导出BOM表步骤一:打开原理图打开项目,双击点开原理图:   步骤二:报告-元器件列表列宽一点,板子元器件种类规格不多的时候,导出的东西也不多,因…

数字孪生-智能制造

1、数字企业内循环:打造端到端的数字化应用体验 2、GARTNER分层架构 3、企业数字化架构 4、数字企业的两大核心特征 6、产品数字主线赋能企业转型 7、数字主线关键技术:基于统一架构构建产品全量数字模型 8、闭环数字化解决方案 9、基于数字主线的设计-仿真-试验协同 10、产品数…

C# WPF PrintDialog 打印(3)

前面https://www.cnblogs.com/yinyu5/p/18634080使用PrintDocument方法打印了Canvas,这里打印下面的DataGrid列表内容:这里DataGrid的数据源是DataTable,后台代码:1 private void PrintDocument_DataTable_Method(string Title, DataTable dataTable)2 {3 …

【JAVA代码审计】记一次某java类的cms最最最详细的代码审计

前言 刚好遇到一个授权的渗透是通过该cms实现getshell,所以顺便审计一下java类的cms,这个管理系统是一个内容管理系统,下载地址 https://gitee.com/oufu/ofcms/tree/V1.1.3/tomcat下载地址 https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-wind…

12.26日每日总结

昨天在调试51单片机的串口时,发现芯片手册上有一句话,在使用定时器1产生串口的波特率时,定时器1就不能使能了。不是不能用,是直接不让使能了,使能后会出错,导致发送的数据不稳定。 今天继续研究了触摸滑条,发现滑条输出的值为从小到大,如下图所示的样子,这就导致从最上…

Minio使用教程

Minio MinIO 是一个高性能的对象存储服务器,用于构建云存储解决方案。它使用Golang编写,专为私有云、公有云和混合云环境设计。它是兼容Amazon S3 API的,并可以作为一个独立的存储后端或与其他流行的开源解决方案(如Kubernetes)集成。 MinIO 允许你存储非结构化数据(如图…

人工智能基础导论

人工智能基础导论 绪论 人工智能的主要流派符号主义(逻辑主义) 连接主义(仿生学派) 行为主义(控制论)符号主义:数理逻辑→逻辑演绎系统→启发式算法→专家系统→知识工程理论与技术(主流)缺点:符号主义的核心是知识表示,那么对于像感知、形象思维、模式识别等问题,…

搭建 npm 私服

背景 准备搭建一个自己的网站,放些平时练手的 demo,如果是不同项目,想要保持风格一致,或是要用到一些工具方法,就要在每个项目复制一份,不是很好维护,于是就想要搭建一个自己的 npm 私服 安装 verdaccio 1 安装 verdaccio,这是一个开源的私有 npm 注册中心,要注意的是…

C# WPF PrintDialog 打印(2)

前面https://www.cnblogs.com/yinyu5/p/18633910使用PrintVisual方法只打印了可见部分的元素,所以这里改为使用PrintDocument方法来进行打印。 需要引用System.Printing.dll 界面代码:1 <Window x:Class="WpfApp123.MainWindow"2 xmlns="http://sc…

Redis可视化工具推荐:Another Redis Desktop Manager使用教程与下载

Redis是一种高性能的Key-Value数据库,被广泛应用于缓存、消息队列等场景。尽管Redis的命令行工具功能强大,但对于许多开发者而言,使用一款可视化工具可以大大提高操作效率和用户体验。今天为大家推荐一款功能强大的Redis可视化工具——Another Redis Desktop Manager,并提供…

RISC-V篇-VSCode+qemu+gdb可视化调试Linux Kernel

https://zhuanlan.zhihu.com/p/4185359719本文发布于微信公众号:Linux底层小工,欢迎关注,获取更多原创技术文章! “VSCode+qemu+gdb调试OpenSBI确实很爽,那怎能少了调试kernel呢~~” 01 VScode调试MMU开启之前的kernel 有了调试OpenSBI的基础,再调试kernel,那设置相当简…

中考阅读理解深入逻辑分析-006 A Streams Journey to the Sea 一条小溪通往大海的旅程

文章正文 A little stream ran down from a high mountain far, far away through many villages and forests, until it reached a desert. The stream then thought,“I’ve been through countless difficulties. I should have no problem crossing the desert!”But as sh…