VO、DTO、DO、BO、PO

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • VO、DTO、DO、BO
    • 1.概念
        • 阿里Java开发手册分层领域模型:
    • 2. VO 和 DTO 使用场景
        • 以下是一个使用VO和DTO的典型案例:
    • 3.BO和DTO的区别
  • 案例


VO、DTO、DO、BO

  • POJO的定义是无规则简单的对象,在日常的代码分层中pojo会被分为VO、BO、 PO、DTO。通过各层POJO的使用,有助于提高代码的可读性和可维护性。

概念看似简单,但是想区分好或者理解好也不容易
在这里插入图片描述
在这里插入图片描述

1.概念

  • Pojo(Plain Ordinary Java Object):纯的传统意义的java对象 最基本的javaBean只有属性加上属性的get和set方法。Pojo可以转化为PO、DTO、VO。比如POJO在传输过程中就是DTO。

  • VO (View Object),用于表示一个与前端进行交互的视图对象,它的作用是把某个指定页面(或组件)的所有数据封装起来。实际上,这里的VO只包含前端需要展示的数据,对于前端不需要的数据,比如数据创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在VO 中体现出来。

  • DTO(Data Transfer Object),用于表示一个数据传输对象DTO通常用于展示层(Controller)和服务层(Service)之间的数据传输对象。DTO 与 VO概念相似,并且通常情况下字段也基本一致。但 DTO 与 VO 又有一些不同,这个不同主要是设计理念上的,比如 API 服务需要使用的 DTO 就可能与 VO 存在差异。

  • DO(Data Object)持久化对象它跟持久层(Dao)的数据结构形成一一对应的映射关系。如果持久层是关系型数据库,那么数据库表中的每个字段就对应PO的一个属性,常是entity实体类。

  • DAO(Data Access Object)数据访问对象 是sun公司的一个标准j2ee设计模式的接口之一,负责持久层的操作。Dao和其他的O区别最大,基本没有互相转化的可能性和必要,主要用来封装对数据的访问,而不是对数据库的访问。

  • PO(Persistant Object)持久层对象,对应数据库中表的字段,数据库中表中的记录在java对象中的显示状态,即一个PO就是数据库中的一条记录。

  • BO(Business Object):业务对象,就是从现实世界中抽象出来的有形或无形的业务实体。

阿里Java开发手册分层领域模型:

在这里插入图片描述
在这里插入图片描述

2. VO 和 DTO 使用场景

在软件开发中,VO和DTO都是常见的数据传输对象,但它们的使用场景有所不同。

VO(View Object)

  1. 通常用于与前端交互,封装前端调用某个接口之后所需的所有数据
  2. 在前后端分离的时代,VO主要应用于表示视图层的类

DTO(Data Transfer Object)

  1. 则主要应用于数据传输层,特别是在Controller层和Service层。

  2. 在Controller层,DTO用于接收参数,无论是单个参数还是多个参数,都可以通过创建一个DTO对象来进行接收。

  3. 使用DTO传参相比使用注解(@RequestParam等)具有更高的可读性和维护性。在Service层,处理复杂的逻辑后,将处理好的DTO进行copyBean即可无伤转换为持久化对象(Bo)。

总的来说,VO和DTO都是为了实现程序中的数据传输和交互,但它们的使用场景不同。前端与后端交互时,使用VO;而在服务层之间传输数据时,使用DTO

以下是一个使用VO和DTO的典型案例:

假设你正在开发一个电子商务网站,用户可以在网站上购买商品。在这个场景中,你可以创建以下对象:

  • UserVO:这是一个视图对象,用于展示用户信息。它可能包括用户名、电子邮件、地址等信息。这个对象主要用于前端页面,例如用户登录页面和购物车页面。
  • UserDTO:这是一个数据传输对象,用于在服务层之间传输用户数据。它可能包括用户ID、用户名和购买商品的数量等信息。这个对象主要用于在Controller层和Service层之间传输数据,例如在用户提交订单时,Controller层会将UserDTO传递给Service层进行处理。

在前端页面上,例如用户登录页面,你可能会创建一个表单,用户需要输入用户名和密码。当用户提交表单时,前端会将用户输入的数据传递给后端。在后端,Controller层会接收到一个UserDTO对象,该对象包含用户输入的用户名和密码等信息。然后,Controller层将UserDTO传递给Service层进行处理。

在Service层,Service层会根据业务逻辑对UserDTO进行处理,例如验证用户名和密码是否正确,并返回一个UserDTO表示处理结果。如果验证失败,UserDTO将包含错误信息,例如“用户名或密码不正确”。然后,Controller层将根据返回的UserDTO做出相应的处理,例如显示错误信息给用户。

在整个过程中,前端只需要关心UserVO对象,而服务层只需要关心UserDTO对象。因此,通过使用VO和DTO,你可以实现前端和后端的解耦,使程序更加清晰和易于维护。

3.BO和DTO的区别

主要区别为字段的删减

  • BO对内,为了进行业务计算,需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成。

案例

有一个博客系统,数据库中存储了很多篇博客。我们会做如下设计:

  • 数据库表:表中的博客包括编号、博客标题、博客内容、博客标签、博客分类、博客状态、创建时间、修改时间等。

  • PO:包括编号、博客标题、博客内容、博客标签、博客分类、博客状态、创建时间、修改时间等。(与数据库表中的字段一样。)

  • VO:在客户端浏览器展示的页面数据,博客标题、博客内容、博客标签、博客分类、创建时间、上一篇博客URL、下一篇博客URL。

  • DTO:在服务端数据传输的对象,编号、博客标题、博客内容、博客标签、博客分类、创建时间、上一篇博客编号、下一篇博客编号。

  • DAO:数据库增删改查的方法,例如新增博客、删除博客、查询所有博客、更新博客。

  • BO:基本业务操作,如管理分类、管理标签、修改博客状态等,是我们常说的service层操作。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot3】Spring Security 常用注解

注:本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1 Spring Security 6 的常用注解包括以下几种,通过这些注解可以更加方便的控制资源权限。 Secured :方法执行前检查,直接判断有没有对应的角色PreAuthorize:方…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题? 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N6,M5,被杀掉的顺序是:5&#xff…

tkinter做一个秒表

文章目录 需求和框架布局和主流程计时函数 需求和框架 本文试图实现一个简单的秒表,内容如下 这个软件非常简单,其UI元素只有一个文字标签外加三个按钮,这三个按钮的功能如下 点击Start按钮,开始进行计时,同时Start变…

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况: 可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找,最终明白了原因…

【鸿蒙系统学习笔记】状态管理

一、介绍 资料来自官网:文档中心 在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状…

电脑提醒待办事项:高效、快捷、更科学的方法

在这个快节奏的社会里,我常常感到时间不够用,仿佛一天24小时根本不够我分配。每天都有一大堆待办事项等着我,但总是有这样那样的事情让我分心,导致我经常忘记一些重要的任务。 每次当我想起那些被遗忘的待办事项时,都…

本地创建Git仓库

在 Windows 下,可以通过以下步骤在本地创建一个 并模拟远程Git 仓库。 1、在命令行中打开模拟远程Git 仓库目标文件夹: 打开命令提示符或 PowerShell。例如: 创建裸仓库(模拟远程仓库):创建一个裸仓库&am…

亚马逊、沃尔玛、eBay等跨境平台自养号测评的风险和技术解析

亚马逊等平台延伸至世界各地,竞争激烈。许多卖家使用自养号测评来提高产品排名和销量。但自养号测评技术存在一定的技术局限性,很多卖家的账号因对自养号原理和底层环境搭建缺乏了解很多卖家的账号被关联封禁。本文将为您揭示自养号测评的风险&#xff0…

【小呆的力学笔记】弹塑性力学的初步认知四:简单应力状态下的应力应变关系

文章目录 2. 简单应力状态下的应力应变关系2.1 简单拉伸的应力应变关系2.2 真实应力应变关系2.3 应力-应变关系简化模型 2. 简单应力状态下的应力应变关系 我们在高中就学过,弹簧拉伸力和变形量成比例,对于一般的金属材料,在一定载荷以内这种…

Cadence Allegro PCB设计88问解析(三十三) 之 Allegro 中 Quick Reports的使用

一个学习信号完整性仿真的layout工程师 在进行PCB设计时,经常会查看一下整个PCB的基本信息,比如器件个数,网络数量、pin的数量。尤其在投板的时候还要查看下Dangling Lines、Dangling Vias等。还有其他的关于shape、via、走线、钻孔等等相关信…

顶顶通实时质检系统如何添加词库

文章目录 前言联系我们步骤1. 导入系统预置词库2. 手动添加词库 在实时质检时如何质检到词库 前言 本篇文章主要讲解顶顶通实时质检系统如何添加词库。 词库添加的方式: 导入系统预置词库手动添加词库 联系我们 有意向了解实时质检系统的用户,可以点击…

Photoshop 2023(Ps)下载安装及详细安装教程

Photoshop(Ps)的介绍 Adobe Photoshop,简称“PS”,是由AdobeSystems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑和创造工作。PS有很多功能,在图像、…

grafana配置钉钉告警模版(一)

1、配置钉钉告警模版 创建钉钉告警模版,然后在创建钉钉告警时调用模版。 定义发送内容具体代码 my_text_alert_list 是模版名称后面再配置钉钉告警时需要调用。 {{/* 定义消息体片段 */}} {{ define "my_text_alert_list" }}{{ range . }}告警名称&…

术业有专攻!三防加固平板助力工业起飞

在日常使用中的商业电脑比较追求时效性,以市场定位做标准,内部元件只需满足一般要求就行,使用寿命比较短。而三防平板电脑是主要运用在复杂、恶劣的环境下所以在需求方面较高,需要保证产品在恶劣条件下正常使用,满足行业领域的需求…

springboot746旧物置换网站

springboot746旧物置换网站 获取源码——》公主号:计算机专业毕设大全

二维码钓鱼激增587%:用户陷入社交诈骗陷阱!

Check Point软件技术公司发布的新研究揭示了典型的QR码攻击,通过Check Point的实时网络威胁地图,在两周内发现了2万起QR码钓鱼和恶意软件攻击事件,突显了QR码在网络犯罪分子面前的脆弱性。 QR码是"Quick Response Code"&#xff08…

minio+nginx 集群快速搭建

文章目录 1、概要2、整体架构流程3、集群搭建3.1、服务器准备3.2、下载并安装3.3、minio集群配置3.4、minio.service配置3.5、启动 4、nginx 转发 1、概要 minIO 是一个开源的分布式对象存储服务,可用于构建高可用性和高扩展性的存储集群。 分布式架构:…

SpringSecurity + OAuth2 详解

SpringSecurity入门到精通 ************************************************************************** SpringSecurity 介绍 **************************************************************************一、入门1.简介与选择2.入门案例-默认的登录和登出接口3.登录经过了…

CSS SVG技术制作的复杂多层发光星形加载动画组件

<template><!-- 定义一个视图容器,用于展示加载动画 --><view class="loader"><svg viewBox="0 0 128 128" height="128" width="128" class="star"><defs><filter id="star-glow&q…

Windows下用CMake编译ITK及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 ITK是什么&#xff1f; ITK&#xff08; Insight Segmentation and Registration Toolkit&#xff09;是美国国家卫生院下属的国…