這些只是開發(fā)的規(guī)范,規(guī)范就是建議遵守的,大家都這樣做,長(zhǎng)期以來就形成了一種開發(fā)規(guī)范,便于我們開發(fā)。
DO、BO、DTO、VO、AO他們都是普通的Java類,只不過通常我們把他們放在DO、BO、DTO、VO、AO名的包下,結(jié)尾以DO、BO、DTO、VO、AO命名放在這些包下的類。
有時(shí)DO也會(huì)放在名為PO(Persistent Object)的包下
DO
DO(Data Object)
先介紹最簡(jiǎn)單的DO,一個(gè)DO你就可以理解為一張Mysql里的表,不過這個(gè)表是實(shí)體的一個(gè)Java類,一個(gè)DO的對(duì)象就表示mysql里的一條數(shù)據(jù)。
準(zhǔn)確的說,DO也并不是對(duì)應(yīng)于Mysql的一張表,可以表示應(yīng)用程序中任何一個(gè)具有實(shí)體屬性的對(duì)象。一般來說DO應(yīng)該包含業(yè)務(wù)屬性和持久化屬性兩個(gè)方面,既保證了業(yè)務(wù)對(duì)象的正確性和完整性,又保證了數(shù)據(jù)的可持久化和可恢復(fù)性。
下面是一個(gè)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 {
/**
* 宿舍號(hào) 復(fù)合主鍵1
*/
@TableId(type = IdType.NONE)
private String dorm_num;
/**
* 宿舍樓
*/
private String dorm_building;
/**
* 學(xué)院id
*/
private int college_id;
/**
* 校區(qū)id
*/
private int campus_id;
}
DTO
DTO(Data Transfer Object)
DTO 簡(jiǎn)單理解就是接收前端傳遞過來的數(shù)據(jù)的,比如前端給你傳遞一個(gè)POST請(qǐng)求,你想用對(duì)象進(jìn)行接收,此時(shí)我們就會(huì)使用DTO對(duì)象來接收。
下面是一個(gè)DTO的例子,我們用SaveCheckMissionDTO類來接收前端傳遞過來的POST請(qǐng)求的請(qǐng)求體對(duì)應(yīng)參數(shù)
/**
* 功能模塊:宿舍檢查
*
* 用于存儲(chǔ)一次檢查任務(wù)的發(fā)布
* @param saveCheckMissionDTO 一個(gè)封裝的接收類
* @return
*/
@PostMapping("/set_and_publish_check")
public HttpResult publish_check(@RequestBody SaveCheckMissionDTO saveCheckMissionDTO){
return dormitoryService.publish_check(saveCheckMissionDTO);
}
SaveCheckMissionDTO類如下
/**
* 用于接收的前端傳遞的參數(shù)的類
* @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簡(jiǎn)單來說,就是我們返回給前端數(shù)據(jù)用的對(duì)象就是VO,比如你從數(shù)據(jù)庫查了一些表的部分信息,封裝之后,要返回給前端,此時(shí)你就你可以用一個(gè)VO來進(jìn)行封裝,返回給前端。
在實(shí)際項(xiàng)目中也可能存在根據(jù)具體接口和需求創(chuàng)建獨(dú)立AO類的情況。
舉例如下
@Override
public HttpResult judge_previous_status() {
PreviousInfoVO previousInfoVO = dormitoryMapper.judge_previous_status();
return previousInfoVO==null? HttpResult.success():HttpResult.success(previousInfoVO);
}
一個(gè)VO類的例子
/**
* 查詢有沒有正在進(jìn)行的查寢任務(wù),有的話把這個(gè)返回
*
* @author kerwin
* @create 2023-04-26 19:48
*/
@Getter
@Setter
public class PreviousInfoVO {
private String startTime;
private String endTime;
}
BO
BO(Business Object)
BO作為服務(wù)層的對(duì)象,舉個(gè)例子,針對(duì)一個(gè)在線商店,商店中的商品、訂單和用戶等都屬于業(yè)務(wù)對(duì)象。以商品為例,商品有價(jià)格,商品描述等屬性,還有一些添加商品、刪除商品的方法,那么用于描述商品的一個(gè)類,我們就可以歸類為BO。
public class ProductBO {
private String productId;
private String productName;
private BigDecimal price;
private String description;
// getter and setter methods
public void addProduct(ProductDO product) {
// 根據(jù)業(yè)務(wù)邏輯處理商品添加操作
}
public void updateProduct(ProductDO product) {
// 根據(jù)業(yè)務(wù)邏輯處理商品更新操作
}
public void deleteProduct(String productId) {
// 根據(jù)業(yè)務(wù)邏輯處理商品刪除操作
}
public List<ProductVO> queryProductList() {
// 根據(jù)業(yè)務(wù)邏輯查詢商品列表,并將結(jié)果轉(zhuǎn)換為VO返回
}
}
AO
AO(Action Object)
以上面的商品BO為例,一個(gè)商品BO周邊應(yīng)該還會(huì)有一些行為,比如獲取商品列表,根據(jù)關(guān)鍵字搜索商品,添加商品到購物車等等的行為,這每一個(gè)行為,其實(shí)都可以作為一個(gè)AO類來創(chuàng)建。
而實(shí)際上AO有時(shí)還會(huì)被理解成為Application Object,對(duì)于AO筆者了解的并不是特別多,如果后續(xù)有深入了解,會(huì)回來更新這篇博客
感謝你的觀看??!????文章來源:http://www.zghlxwxcb.cn/news/detail-427821.html
如果看完文章后你有所收獲,且非常有條件的話,請(qǐng)給我點(diǎn)個(gè)贊吧,謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-427821.html
到了這里,關(guān)于簡(jiǎn)單易懂的理解java開發(fā)中的 DO、BO、DTO、VO、AO都是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!