標籤:access tps 題記 .net 取數 擷取資料 api http 表現層
原文:80244407
題記
編寫本篇文章的緣由是阿狸JAVA開發手冊多處提到DO、BO、DTO、VO、PO等概念;
內容多引用於網路文章上的回答,如下:
知乎:PO BO VO DTO POJO DAO DO這些Java中的概念分別指一些什嗎?
CNblogs:PO BO VO DTO POJO DAO概念及其作用(附轉換圖)
概念及理解
這些概念用於描述對象的類型;由於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) Data Access Objects
這個大家最熟悉,和上面幾個O區別最大,基本沒有互相轉化的可能性和必要.,主要用來封裝對資料庫的訪問。通過它可以把POJO持久化為PO,用PO組裝出來VO、DTO;
用於表示一個Data Access Objects。使用 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;
例子是根據當前進行中的績效評估事件總結,簡單的例子可以參照上述知乎上面大神的回答。
Java中常見的物件類型簡述(DO、BO、DTO、VO、AO、PO)(轉)