POJO PO BO DO DTO VO 區別與聯絡
阿新 • • 發佈:2018-11-25
POJO PO BO DO DTO VO
概述
縮寫 | 全稱 | 中文 | 功能 | 說明 |
---|---|---|---|---|
POJO | plain ordinary java object | 無規則簡單java物件 | 中間物件,與其他物件轉換 | |
PO | persistent object | 持久物件 | 資料物件對應資料庫中的entity | |
BO | business object | 業務物件 | 封裝業務邏輯物件 | |
VO | value object / view object | 表現層物件 | 封裝檢視層物件 | |
DTO | data transfer object | 資料傳輸物件 | 跨程序或遠端傳輸 | |
DO | domain object | 領域物件 | 從現實世界中抽象出來的有形或無形的業務實體 | |
DAO | data access object | 資料訪問物件 | 封裝對資料庫訪問物件 |
問題
- 為什麼專案中要存在多種物件,多種物件直接需要相互轉換,是否無用?
- 舉例:資料插入操作
- HTTP:
- (Controller 層 )VO 物件 --> (Service 層) BO 物件 --> (DAO 層) PO 物件 --> DAO 物件
- RPC :
- (RPC 介面)DTO 物件 --> --> (Service 層) BO 物件 --> (DAO 層) PO 物件 --> DAO 物件
- HTTP:
- 回答:
- 世界上有大狗(可以看家護院)的存在也有小狗存在的必要,沒有一種事務的存在是沒有理由的
- 程式碼中不同的層次需要使用不同的物件,使用不同的物件是為了更好的理解業務及解決問題
- 舉例:
- PO / DO 物件通常對應資料表實體對映物件;如果沒有BO物件,此時業務需求需要將時間格式化後展示,需要在PO類中增加屬性,但增加的屬性卻不是表中應有的欄位,使PO類的含義發生了變化
- 如設計活動,活動實體是一張表,活動頁面樣式、活動優惠等等又是一張表,在將資料返給前端時,前端不需要知道後端是幾張表的實現,只需要知道解析這個物件中的相關屬性即可;此時需要BO物件來中轉,BO物件對應多個PO物件
- 舉例:
- 有這種疑問通常是BO與PO物件的屬性完全沒有區別,此時需要考慮程式業務邏輯,是否需要將查詢結果全部返回給呼叫方
- 舉例:資料插入操作