wordpress活動(dòng)召集插件seo內(nèi)部優(yōu)化具體做什么
如果有遺漏,評論區(qū)告訴我進(jìn)行補(bǔ)充
面試官: Java中的PO、VO、BO、DO、DAO、DTO、POJO是什么意思?
我回答:
PO持久化對象(Persistent Object)
PO是持久化對象,用于表示數(shù)據(jù)庫中的實(shí)體或表的映射
通常與數(shù)據(jù)庫表的結(jié)構(gòu)和字段對應(yīng)
PO的屬性對應(yīng)數(shù)據(jù)庫表的字段,可以進(jìn)行持久化操作(新增、查詢、更新、刪除)
例如:UserPO 中的屬性和數(shù)據(jù)庫表中的字段是一一對應(yīng)的。
// 通常與數(shù)據(jù)庫表對應(yīng)
public class UserPO {private Long id;private String username;private String password;
}
VO值對象(Value Object)
VO是值對象,用于封裝數(shù)據(jù)
通常是不可變的,用于傳遞數(shù)據(jù)而不包含業(yè)務(wù)邏輯
VO可以用于在不同層之間傳遞數(shù)據(jù),如前端和后端之間,后端的返回的到前端的數(shù)據(jù)只需要保留必要的字段就可以,將這些必要的字段封裝起來就是VO
例如:
// 用于展示,例如給前端的用戶視圖
public class UserVO {private String username;private String display_name;
}
BO業(yè)務(wù)對象(Business Object)
BO是業(yè)務(wù)對象,用于封裝業(yè)務(wù)邏輯和操作
包含與業(yè)務(wù)相關(guān)的方法和屬性,用于實(shí)現(xiàn)業(yè)務(wù)規(guī)則和操作
BO通常與領(lǐng)域模型緊密相關(guān),用于表示業(yè)務(wù)概念和業(yè)務(wù)流程
例如:UserBO在包含了屬性id和username的基礎(chǔ)上還包含了對username的驗(yàn)證邏輯
// 包含業(yè)務(wù)邏輯
public class UserBO {private Long id;private String username;public boolean isValid() {return username != null && !username.isEmpty();}
}
DO數(shù)據(jù)對象(Data/Domain Object)
DO通常與BO和PO相對應(yīng),用于實(shí)現(xiàn)領(lǐng)域模型和業(yè)務(wù)邏輯,用于表示從數(shù)據(jù)存儲(chǔ)中得到的數(shù)據(jù)
例如:
// 這里的DO和PO非常相似
public class UserDO {private Long id;private String username;private String password;
}
DAO數(shù)據(jù)訪問對象(Data Access Object)
DAO是數(shù)據(jù)訪問對象,用于封裝對數(shù)據(jù)庫的訪問操作,也就是我們常說的Dao層
提供對數(shù)據(jù)庫的增刪改查等操作的接口
DAO可以隱藏底層數(shù)據(jù)庫的具體實(shí)現(xiàn)細(xì)節(jié),使得業(yè)務(wù)邏輯層與數(shù)據(jù)庫解耦
例如:UserDao提供了對數(shù)據(jù)庫表user的增刪改查操作,這里的UserPO就是我們上面說的用來一一對應(yīng)接收表中的字段
public interface UserDao {UserPO getById(Long id);void save(UserPO user);void delete(UserPO user);List<UserPO> findAll();
}
DTO數(shù)據(jù)傳輸對象(Data Transfer Object)
DTO是數(shù)據(jù)傳輸對象,用于在不同層之間傳輸數(shù)據(jù)
通常用于優(yōu)化數(shù)據(jù)傳輸?shù)男阅芎蜏p少網(wǎng)絡(luò)通信的開銷。
DTO可以封裝多個(gè)對象的數(shù)據(jù),以減少網(wǎng)絡(luò)請求次數(shù)
如果說VO一般用于前端和后端之后傳輸數(shù)據(jù),那么DTO就是在后端的不同層之間傳遞數(shù)據(jù),例如controller層和service層或者在服務(wù)之間結(jié)構(gòu)調(diào)用的時(shí)候使用DTO
例如:
// 用于API或遠(yuǎn)程服務(wù)間的數(shù)據(jù)傳輸
public class UserDTO {private String username;private String email;
}
POJO普通Java對象(Plain Old Java Object)
POJO是一個(gè)簡單的Java對象,沒有特定的限制和約束
是一種普通的Java類,不依賴于特定的框架或接口
例如:User類是一個(gè)普通的java實(shí)體類
// 簡單的Java對象,不繼承或?qū)崿F(xiàn)任何特殊的類或接口
public class User {private Long id;private String name;
}
總結(jié)
- 所有的對象: PO/VO/BO/DO/DTO/POJO, 持久化對象,值對象,業(yè)務(wù)對象,數(shù)據(jù)對象,數(shù)據(jù)傳輸對象,簡單對象
- PO: 持久化對象,主要用于數(shù)據(jù)庫交互,通常與數(shù)據(jù)庫表結(jié)構(gòu)對應(yīng)
- VO:值對象主要和前端進(jìn)行交互,接受前端的數(shù)據(jù)或返回前端數(shù)據(jù)
- BO:業(yè)務(wù)對象, 封裝業(yè)務(wù)邏輯, 包含多個(gè)VO和DO的組合, 涵蓋了業(yè)務(wù)規(guī)則的操作, 對象里會(huì)包含其他額外的校驗(yàn)判斷邏輯
- DO: 數(shù)據(jù)對象, 強(qiáng)調(diào)的是從數(shù)據(jù)角度描述業(yè)務(wù)對象, 從數(shù)據(jù)庫表或者是其他存儲(chǔ)數(shù)據(jù)中得到的數(shù)據(jù), 例如redis,文本文件.
- DTO: 數(shù)據(jù)傳輸對象, 分布式系統(tǒng)中服務(wù)接口間的數(shù)據(jù)傳輸, 后端不同層之間的數(shù)據(jù)傳輸
- POJO: 簡單的java對象,沒有繼承的簡單類.