1. 程式人生 > >Java中常見的物件型別簡述(DO、BO、DTO、VO、AO、PO)

Java中常見的物件型別簡述(DO、BO、DTO、VO、AO、PO)

這些概念用於描述物件的型別;由於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。

舉個例子: 
事情:統計研發部門中的季度績效(暫定以工程師填寫的為準,當然實際上大部分不是) 
過程:CTO釋出統計績效請求(附帶要求:每個人對應的績效等級)->各個組(也可以是子部門)負責人釋出統計績效請求(每個對應的績效等級,並將績效分為了3個方面)->每位開發工程師統計自己績效(自身各個方面); 
可以從例子中看到:每個責任人要求都不同; 
對於CTO,他需要知道的是該季度所用員工的績效等級;這裡可以認為VO:員工姓名、績效等級; 
開發工程師:需將本人這個季度的各個方面的表現都列出來:員工姓名、績效等級、A方面表現內容及等級、B方面表現內容及等級、C方面表現內容及等級、D方面表現內容及等級、E方面表現內容及等級、F方面表現內容及等級、E方面表現內容及等級;此處可認為是PO:員工姓名、績效等級、A方面表現內容、A方面等級….E方面表現內容、E方面等級; 
然後開發工程師將員工姓名、績效等級、A方面表現內容及等級、B方面表現內容及等級、C方面表現內容及等級內容傳遞給小組負責人;此處傳遞的物件就是DTO 
小組負責人:從開發工程師中獲取到資料後,經過評定,然後得出員工姓名、績效等級、原因;此處的評定,可以理解為BO
--------------------- 
作者:summer_sunrise 
來源:CSDN 
原文:https://blog.csdn.net/uestcyms/article/details/80244407 
版權宣告:本文為博主原創文章,轉載請附上博文連結!