这些只是开发的规范,规范就是建议遵守的,大家都这样做,长期以来就形成了一种开发规范,便于我们开发。
DO、BO、DTO、VO、AO他们都是普通的Java类,只不过通常我们把他们放在DO、BO、DTO、VO、AO名的包下,结尾以DO、BO、DTO、VO、AO命名放在这些包下的类。

有时DO也会放在名为PO(Persistent Object)的包下

DO

DO(Data Object)
先介绍最简单的DO,一个DO你就可以理解为一张Mysql里的表,不过这个表是实体的一个Java类,一个DO的对象就表示mysql里的一条数据。

准确的说,DO也并不是对应于Mysql的一张表,可以表示应用程序中任何一个具有实体属性的对象。一般来说DO应该包含业务属性和持久化属性两个方面,既保证了业务对象的正确性和完整性,又保证了数据的可持久化和可恢复性。

下面是一个DO的例子。

package com.xut.yiban.user.entity.po.dormitory;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 宿舍类* @author kerwin* @create 2023-04-17 13:02*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Dormitory {/*** 宿舍号 复合主键1*/@TableId(type = IdType.NONE)private String dorm_num;/*** 宿舍楼*/private String dorm_building;/*** 学院id*/private int college_id;/*** 校区id*/private int campus_id;}

DTO

DTO(Data Transfer Object)
DTO 简单理解就是接收前端传递过来的数据的,比如前端给你传递一个POST请求,你想用对象进行接收,此时我们就会使用DTO对象来接收。

下面是一个DTO的例子,我们用SaveCheckMissionDTO类来接收前端传递过来的POST请求的请求体对应参数

    /*** 功能模块:宿舍检查** 用于存储一次检查任务的发布* @param saveCheckMissionDTO 一个封装的接收类* @return*/@PostMapping("/set_and_publish_check")public HttpResult publish_check(@RequestBody SaveCheckMissionDTO saveCheckMissionDTO){return dormitoryService.publish_check(saveCheckMissionDTO);}

SaveCheckMissionDTO类如下

/*** 用于接收的前端传递的参数的类* @author kerwin* @create 2023-04-18 0:09*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SaveCheckMissionDTO {private Map<String,ArrayList<String>> checkRange;private String percent;private String startTime;private String endTime;private String excelInfo;private ArrayList<TeacherinfoDTO> teachers;
}

VO

VO(View Object)
VO简单来说,就是我们返回给前端数据用的对象就是VO,比如你从数据库查了一些表的部分信息,封装之后,要返回给前端,此时你就你可以用一个VO来进行封装,返回给前端。

在实际项目中也可能存在根据具体接口和需求创建独立AO类的情况。

举例如下

    @Overridepublic HttpResult judge_previous_status() {PreviousInfoVO previousInfoVO = dormitoryMapper.judge_previous_status();return previousInfoVO==null? HttpResult.success():HttpResult.success(previousInfoVO);}

一个VO类的例子

/*** 查询有没有正在进行的查寝任务,有的话把这个返回** @author kerwin* @create 2023-04-26 19:48*/
@Getter
@Setter
public class PreviousInfoVO {private String startTime;private String endTime;
}

BO

BO(Business Object)
BO作为服务层的对象,举个例子,针对一个在线商店,商店中的商品、订单和用户等都属于业务对象。以商品为例,商品有价格,商品描述等属性,还有一些添加商品、删除商品的方法,那么用于描述商品的一个类,我们就可以归类为BO。

public class ProductBO {private String productId;private String productName;private BigDecimal price;private String description;// getter and setter methodspublic void addProduct(ProductDO product) {// 根据业务逻辑处理商品添加操作}public void updateProduct(ProductDO product) {// 根据业务逻辑处理商品更新操作}public void deleteProduct(String productId) {// 根据业务逻辑处理商品删除操作}public List<ProductVO> queryProductList() {// 根据业务逻辑查询商品列表,并将结果转换为VO返回}
}

AO

AO(Action Object)
以上面的商品BO为例,一个商品BO周边应该还会有一些行为,比如获取商品列表,根据关键字搜索商品,添加商品到购物车等等的行为,这每一个行为,其实都可以作为一个AO类来创建。

而实际上AO有时还会被理解成为Application Object,对于AO笔者了解的并不是特别多,如果后续有深入了解,会回来更新这篇博客

感谢你的观看!!

简单易懂的理解java开发中的 DO、BO、DTO、VO、AO都是什么✌相关推荐

  1. java vo命名规则_阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO

    前言 在阅读<阿里巴巴Java开发手册>时,看到命名规则中有这样一条 虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到. 网上查找 ...

  2. Java开发中的常见危险信号

    在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码问题. 我不是在谈论总是错误的 ...

  3. 深入理解Java虚拟机--中

    深入理解Java虚拟机--中 第6章 类文件结构 6.2 无关性的基石 无关性的基石:有许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码(ByteCode),从而 ...

  4. Java开发中常用的设计模式-单例模式

    单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. Java开发中常用的设计模式-单例模式 单例模式有3个特点: 单例类只有一个实例对象: 该单例对象必须 ...

  5. Java开发中常见的危险信号(中)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-1 Dustin Ma ...

  6. Java开发中常见的危险信号(下)

    本文来源于我在InfoQ中文站原创的文章,原文地址是:http://www.infoq.com/cn/news/2013/12/common-red-flags-in-java-3 Dustin Ma ...

  7. Java开发中常见的危险信号

    Dustin Marx是一位专业软件开发者,从业已经有17年的时间,他拥有电子工程学士学位,还是一位MBA.Dustin维护着一个博客,专门介绍软件开发的各个主题.近日,他撰文谈到了Java开发中常见 ...

  8. JAVA 开发中常用的工具有哪些?

    Java开发中常用的工具有以下几种: Eclipse:一款非常流行的开发工具,提供了很多方便的功能,如代码自动补全.调试.版本控制等. IntelliJ IDEA:一款功能强大的Java集成开发环境, ...

  9. Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

    苍穹之边,浩瀚之挚,眰恦之美: 悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 提起Java领域中的锁,是否有种"道不尽红尘奢恋,诉不完人间恩怨"的 ...

最新文章

  1. 分布式 - Jetty架构
  2. 房地产萧条的两个标志
  3. StevenBoyd--Convex optimization--0. Contents
  4. java swing 代码_java swing编写gui生命游戏代码,新手上路
  5. Elasticsearch 动态映射——自动检测
  6. Windows 中不规则窗体的编程实现三种方法:CRgn,作图路径法,据图像创建region
  7. 圣水盆景区是闾山最著名的景点
  8. matlab 四维等值面图,一个4列数组怎样画出三维等值面图
  9. 2010计算机录制宏步骤,在word2010录制宏的操作
  10. python loc和iloc_DataFrame的iloc与loc的区别是什么?
  11. 2019八泉峡第二届国际露营大会圆满落幕 创新举措引爆景区
  12. (TT三)Nginx+fastDFS
  13. 美团2021校招笔试-编程题-第10场
  14. 北京的人口、交通和土地利用发展战略: 基于东京都市圈的比较分析
  15. UEFI安装winserver 2008
  16. Podman 保姆级使用教程,太顶了!
  17. Low Latency HLS的实现优化
  18. vb语法-Clng()函数作用及用法
  19. 【python】GIL是什么?
  20. Promethus(普罗米修斯)

热门文章

  1. Spfa算法(可以求有负权的图)
  2. RSA算法原理详解(简单易懂)
  3. Ubuntu 修改中文字体教程
  4. 更改tomcat访问端口()
  5. Python对csv、ini、xml、excel等格式文件操作用例
  6. 【Java基础】HashMap原理及常见面试题目
  7. 双链表(double_linked_list):(增、删、改、查、逆置)的C++的例子,稍微改一下,就成C。
  8. 少儿教育和游戏的火花在哪里?
  9. 如何成为一个牛逼的程序猿
  10. Python程序员经常会遇到文件权限问题,例如在打开或写入文件时出现“PermissionError: [Errno 13] Permission denied...