Java中常見的對象類型簡述(DO、BO、DTO、VO、AO、PO)


菜鳥一枚,進公司看見一堆這個O那個O,一臉懵,然后搜索了下,在此記錄下

 

概念及理解
這些概念用於描述對象的類型;由於java是面向對象的語言;程序的世界就是各個對象之間的“交互”;在交互的工程中會存在多個層次,每個層次中所擁有(關注)的內容都是不一樣的;

PO(Persistant Object) 持久對象
用於表示數據庫中的一條記錄映射成的 java 對象。PO 僅僅用於表示數據,沒有任何數據操作。通常遵守 Java Bean 的規范,擁有 getter/setter 方法。

可以理解是一個PO就是數據庫中的一條記錄;可以理解某個事務依賴的原始數據;好處是可以將一條記錄最為一個對象處理,可以方便轉化為其他對象

BO(Business Object) 業務對象
封裝對象、復雜對象,里面可能包含多個類
主要作用是把業務邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。

用於表示一個業務對象。BO 包括了業務邏輯,常常封裝了對 DAO、RPC 等的調用,可以進行 PO 與 VO/DTO 之間的轉換。BO 通常位於業務層,要區別於直接對外提供服務的服務層:BO 提供了基本業務單元的基本業務操作,在設計上屬於被服務層業務流程調用的對象,一個業務流程可能需要調用多個 BO 來完成。

比如一個簡歷,有教育經歷、工作經歷、社會關系等等。
我們可以把教育經歷對應一個PO,工作經歷對應一個PO,社會關系對應一個PO。
建立一個對應簡歷的BO對象處理簡歷,每個BO包含這些PO。
這樣處理業務邏輯時,我們就可以針對BO去處理。

VO(Value Object) 表現對象
前端界面展示;value object值對象;ViewObject表現層對象;主要對應界面顯示的數據對象。對於一個WEB頁面,或者SWT、SWING的一個界面,用一個VO對象對應整個界面的值;對於Android而言即是activity或view中的數據元素。

用於表示一個與前端進行交互的 java 對象。有的朋友也許有疑問,這里可不可以使用 PO 傳遞數據?實際上,這里的 VO 只包含前端需要展示的數據即可,對於前端不需要的數據,比如數據創建和修改的時間等字段,出於減少傳輸數據量大小和保護數據庫結構不外泄的目的,不應該在 VO 中體現出來。通常遵守 Java Bean 的規范,擁有 getter/setter 方法。

DTO(Data Transfer Object) 數據傳輸對象
前端調用時傳輸;也可理解成“上層”調用時傳輸;
比如我們一張表有100個字段,那么對應的PO就有100個屬性。但是我們界面上只要顯示10個字段,客戶端用WEB service來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端以后,如果用這個對象來對應界面顯示,那此時它的身份就轉為VO.

用於表示一個數據傳輸對象。DTO 通常用於不同服務或服務不同分層之間的數據傳輸。DTO 與 VO 概念相似,並且通常情況下字段也基本一致。但 DTO 與 VO 又有一些不同,這個不同主要是設計理念上的,比如 API 服務需要使用的 DTO 就可能與 VO 存在差異。通常遵守 Java Bean 的規范,擁有 getter/setter 方法

DAO(Data access object) 數據訪問對象
這個大家最熟悉,和上面幾個O區別最大,基本沒有互相轉化的可能性和必要.,主要用來封裝對數據庫的訪問。通過它可以把POJO持久化為PO,用PO組裝出來VO、DTO;

用於表示一個數據訪問對象。使用 DAO 訪問數據庫,包括插入、更新、刪除、查詢等操作,與 PO 一起使用。DAO 一般在持久層,完全封裝數據庫操作,對外暴露的方法使得上層應用不需要關注數據庫相關的任何信息。

POJO(Plain ordinary java object) 簡單java對象
一個POJO持久化以后就是PO;直接用它傳遞、傳遞過程中就是DTO;直接用來對應表示層就是VO。
---------------------
作者:summer_sunrise
來源:CSDN
原文:https://blog.csdn.net/uestcyms/article/details/80244407
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM