这些只是开发的规范,规范就是建议遵守的,大家都这样做,长期以来就形成了一种开发规范,便于我们开发。
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@AllArgsConstructorpublic 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@AllArgsConstructorpublic 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@Setterpublic 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笔者了解的并不是特别多,如果后续有深入了解,会回来更新这篇博客
感谢你的观看!!
如果看完文章后你有所收获,且非常有条件的话,请给我点个赞吧,谢谢!