1. 程式人生 > >PO BO VO DTO POJO DAO DO

PO BO VO DTO POJO DAO DO

縮寫的含義

PO 是 Persistant Object 的縮寫,用於表示資料庫中的一條記錄對映成的 java 物件。PO 僅僅用於表示資料,沒有任何資料操作。通常遵守 Java Bean 的規範,擁有 getter/setter 方法。

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

VO 是 Value Object 的縮寫,用於表示一個與前端進行互動的 java 物件。有的朋友也許有疑問,這裡可不可以使用 PO 傳遞資料?實際上,這裡的 VO 只包含前端需要展示的資料即可,對於前端不需要的資料,比如資料建立和修改的時間等欄位,出於減少傳輸資料量大小和保護資料庫結構不外洩的目的,不應該在 VO 中體現出來。通常遵守 Java Bean 的規範,擁有 getter/setter 方法。

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

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

POJO 是 Plain Ordinary Java Object 的縮寫,表示一個簡單 java 物件。上面說的 PO、VO、DTO 都是典型的 POJO。而 DAO、BO 一般都不是 POJO,只提供一些呼叫方法。

應用

不同型別的物件在架構設計中用於不同的用途,如下的分層架構表示了各個 POJO 的用途。為什麼要在分層架構中,定義這些 POJO 物件呢?主要是為了確保各個分層能夠很好地封裝自己的服務,有效地控制資訊的傳播。

https://pic3.zhimg.com/80/v2-bbac0456af84c9feb17b03cdd9501222_hd.jpg

試想一下,如果沒有 VO 和 PO 的區別,那麼資料庫表結構的所有欄位就一覽無餘地展示到了前端,給後臺安全帶來很大的隱患,並且無法在網路傳輸中剝離冗餘資訊提高了使用者的頻寬成本。

例項

以一個例項來探討下 POJO 的使用。假設我們有一個面試系統,資料庫中儲存了很多面試題,通過 web 和 API 提供服務。可能會做如下的設計:

資料表:表中的面試題包括編號、題目、選項、答案、建立時間、修改時間;

PO:包括題目、選項、答案、建立時間、修改時間;

VO:題目、選項、答案、上一題URL、下一題URL;

DTO:編號、題目、選項、答案、上一題編號、下一題編號;

DAO:資料庫增刪改查方法;

BO:業務基本操作。