「每日分享」你真的理解VO DAO BO 等命名規則的意義嗎

點擊上方"java全棧技術"關注,每天學習一個java知識點

開發中很多時候我們會根據類型的含義按照既定的規則進行命名,其中比較常見的有 PO、VO、DAO、BO等。這篇文章聊聊這些縮寫的含義,希望對您有幫助。

縮寫的含義

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 對象呢?主要是為了確保各個分層能夠很好地封裝自己的服務,有效地控制信息的傳播。

「每日分享」你真的理解VO DAO BO 等命名規則的意義嗎

試想一下,如果沒有 VO 和 PO 的區別,那麼數據庫表結構的所有字段就一覽無餘地展示到了前端,給後臺安全帶來很大的隱患,並且無法在網絡傳輸中剝離冗餘信息提高了用戶的帶寬成本。

實例

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

數據表:表中的面試題包括編號、題目、選項、答案、創建時間、修改時間;

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

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

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

DAO:數據庫增刪改查方法;

BO:業務基本操作。

可以看到,進行 POJO 劃分後,我們得到了一個設計良好的架構,各層數據對象的修改完全可以控制在有限的範圍內。


分享到:


相關文章: