PO(Persistant Object)能夠當作是與數據庫中的表相映射的java對象。最簡單的PO就是對應數據庫中某個表中的一條記錄,多個記錄能夠用PO的集合。PO中應該不包含任何對數據庫的操做。 好處就是能夠把一條記錄做爲一個對象處理,能夠方便的轉爲其餘對象。
PO由一組屬性和屬性的get和set方法組成。
PO是在向數據庫中添加新數據時建立,刪除數據庫中數據時削除。而且PO只能存活在一個數據庫鏈接中,斷開鏈接就被銷燬。
PO是有狀態的,每一個屬性表明其當前的狀態,他是物理數據的對象表示。使用它,可使咱們的程序與物理數據解耦,而且能夠簡化對象數據與物理數據之間的轉換。
PO屬性是跟數據庫表的字段一一對應的。PO對象須要實現序列化接口。前端
value object值對象。一般用於業務層之間的數據傳遞,和PO同樣也是僅僅包含數據而已。但應是抽象出的業務對象,能夠和表對應,也能夠不,這根據業務的須要.我的以爲同DTO(數據傳輸對象),在web上傳遞。
VO由一組屬性和屬性的get和set方法組成。
VO是用new關鍵字建立,由GC回收。
VO是值對象,或者說是業務對象,是存活在業務層,是業務邏輯使用的,意義在於爲微數據提供一個生存的地方。
VO的屬性是根據當前業務的不一樣而不一樣,即,它的每個屬性都一一對應當前業務邏輯所須要的數據的名稱。java
Data Access Object數據訪問對象,是sun的一個標準j2ee設計模式 .此對象用於訪問數據庫。一般和PO結合使用,DAO中包含了各類數據庫的操做方法。經過它的方法,結合PO對數據庫進行相關的操做。夾在業務邏輯與數據庫資源中間。配合VO, 提供數據庫的CRUD操做。web
BO(Business Object)業務對象,封裝業務邏輯的java對象,經過調用DAO方法,結合PO,VO進行業務操做。這個對象能夠包括一個或多個其它的對象。
好比一個簡歷,有教育經歷、工做經歷、 關係等等。咱們能夠把教育經歷對應一個PO,工做經歷對應一個PO, 關係對應一個PO。創建一個對應簡歷的BO對象處理簡歷,每一個BO包含這些PO。這樣處理業務邏輯時,咱們就能夠針對BO去處理。
關於BO主要有三種概念 :面試
在實際使用中,認爲哪種概念正確並不重要,關鍵是實際應用中適合本身項目的須要數據庫
POJO(Plain Ordinary Java Object簡單無規則java對象)是純粹的傳統意義的java對象。就是說在一些Object Relation Mapping工具中,可以作到維護數據庫表記錄的persisent object徹底是一個符合Java Bean規範的純Java對象,沒有增長別的屬性和方法,即,最基本的Java Bean,只有屬性字段及setter和getter方法!設計模式
DTO(Data Transfer Object,數據傳輸對象)主要用於遠程調用等須要大量傳輸對象的地方。 好比說,咱們一張表有100個字段,那麼對應的PO就有100個屬性。可是咱們界面上只要顯示10個字段, 客戶端用WEB service來獲取數據,沒有必要把整個PO對象傳遞到客戶端, 這時咱們就能夠用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端之後,若是用這個對象來對應界面顯示,那此時它的身份就轉爲VO。 DTO 是一組須要跨進程或網絡邊界傳輸的聚合數據的簡單容器。它不該該包含業務邏輯,並將其行爲限制爲諸如內部一致性檢查和基本驗證之類的活動。注意,不要因實現這些方法而致使 DTO 依賴於任何新類。在設計數據傳輸對象時,您有兩種主要選擇:使用通常集合;或使用顯式的 getter 和 setter 方法建立自定義對象。安全
不一樣類型的對象在架構設計中用於不一樣的用途,以下的分層架構表示了各個 POJO 的用途。是爲了確保各個分層可以很好地封裝本身的服務,有效地控制信息的傳播,在分層結構中對POJO對象進行定義。 網絡
若是沒有 VO 和 PO 的區別,那麼數據庫表結構的全部字段就盡收眼底地展現到了前端,給後臺安全帶來很大的隱患,而且沒法在網絡傳輸中剝離冗餘信息提升了用戶的帶寬成本以一個實例來探討下 POJO 的使用。假設咱們有一個面試系統,數據庫中存儲了不少面試題,經過 web 和 API 提供服務。可能會作以下的設計:架構
能夠看到,進行 POJO 劃分後,咱們獲得了一個設計良好的架構,各層數據對象的修改徹底能夠控制在有限的範圍內。app
參考文獻: