1,PO(Persistent Object)
持久層對象,它是由一組屬性和屬性的get和set方法組成,最簡單的 PO 就是對應數據庫中某個表中的一條記錄(也就是說,我們可以將數據庫表中的一條記錄理解為一個持久層對象),多個記錄可以用 PO 的集合,PO 中應該不包含任何對數據庫的操作。PO 的屬性是跟數據庫表的字段一一對應的,此外 PO 對象需要實現序列化接口。
注:日常開發中,由於 mybatis 框架的原因,這一實體類我們通常省略后綴,並定義為 entity 層
2,BO(Business Object)
業務層對象,是簡單的真實世界的軟件抽象,通常位於中間層。BO 的主要作用是把業務邏輯封裝為一個對象,這個對象可以包括一個或多個其它的對象。舉一個求職簡歷的例子,每份簡歷都包括教育經歷、項目經歷等,我們可以讓教育經歷和項目經歷分別對應一個 PO,這樣在我們建立對應求職簡歷的 BO 對象處理簡歷的時候,讓每個 BO 都包含這些 PO 即可
注:用於業務邏輯傳輸層
3,VO(Value Object)
值對象,通常用於業務層之間的數據傳遞,和 PO 一樣也是僅僅包含數據而已,但 VO 應該是抽象出的業務對象,可以和表對應,也可以不對應,這根據業務的需要。 如果鍋碗瓢盆分別為對應的業務對象的話,那么整個碗櫃就是一個值對象。此外,VO 也可以稱為頁面對象,如果稱為頁面對象的話,那么它所代表的將是整個頁面展示層的對象,也可以由需要的業務對象進行組裝而來。
注:用於返回給前端
4,DTO(Data Transfer Object)
數據傳輸對象,主要用於遠程調用等需要大量傳輸對象的地方,比如我們有一個交易訂單表,含有 25 個字段,那么其對應的 PO 就有 25 個屬性,但我們的頁面上只需要顯示 5 個字段,因此沒有必要把整個 PO 對象傳遞給客戶端,這時我們只需把僅有 5 個屬性的 DTO 把結果傳遞給客戶端即可,而且如果用這個對象來對應界面的顯示對象,那此時它的身份就轉為 VO。使用 DTO 的好處有兩個,一是能避免傳遞過多的無用數據,提高數據的傳輸速度;二是能隱藏后端的表結構。常見的用法是:將請求的數據或屬性組裝成一個 RequestDTO,再將響應的數據或屬性組裝成一個 ResponseDTO
注:用於接收來自客戶端的參數,用於封裝數據庫查詢的結果對象
5,TO(Transfer Object)
不同的應用程序之間傳輸的對象