菜鳥一枚,進公司看見一堆這個O那個O,一臉懵,而後搜索了下,在此記錄下。
這些概念用於描述對象的類型;因爲java是面向對象的語言;程序的世界就是各個對象之間的「交互」;在交互的工程中會存在多個層次,每一個層次中所擁有(關注)的內容都是不同的;前端
用於表示數據庫中的一條記錄映射成的 java 對象。PO 僅僅用於表示數據,沒有任何數據操做。一般遵照 Java Bean 的規範,擁有 getter/setter 方法。java
能夠理解是一個PO就是數據庫中的一條記錄;能夠理解某個事務依賴的原始數據;好處是能夠將一條記錄最爲一個對象處理,能夠方便轉化爲其餘對象數據庫
封裝對象、複雜對象,裏面可能包含多個類。 .net
主要做用是把業務邏輯封裝爲一個對象。這個對象能夠包括一個或多個其它的對象
。設計
用於表示一個業務對象。BO 包括了業務邏輯,經常封裝了對 DAO、RPC 等的調用,能夠進行 PO 與 VO/DTO 之間的轉換。BO 一般位於業務層,要區別於直接對外提供服務的服務層:BO 提供了基本業務單元的基本業務操做,在設計上屬於被服務層業務流程調用的對象,一個業務流程可能須要調用多個 BO 來完成。code
好比一個簡歷,有教育經歷、工做經歷、社會關係等等。
咱們能夠把教育經歷對應一個PO,工做經歷對應一個PO,社會關係對應一個PO。
創建一個對應簡歷的BO對象處理簡歷,每一個BO包含這些PO。
這樣處理業務邏輯時,咱們就能夠針對BO去處理。對象
前端界面展現;value object值對象;ViewObject表現層對象;主要對應界面顯示的數據對象。對於一個WEB頁面,或者SWT、SWING的一個界面,用一個VO對象對應整個界面的值;對於Android而言便是activity或view中的數據元素。blog
用於表示一個與前端進行交互的 java 對象。有的朋友也許有疑問,這裏可不可使用 PO 傳遞數據?實際上,這裏的 VO 只包含前端須要展現的數據便可,對於前端不須要的數據,好比數據建立和修改的時間等字段,出於減小傳輸數據量大小和保護數據庫結構不外泄的目的,不該該在 VO 中體現出來。一般遵照 Java Bean 的規範,擁有 getter/setter 方法。事務
前端調用時傳輸;也可理解成「上層」調用時傳輸;
好比咱們一張表有100個字段,那麼對應的PO就有100個屬性。可是咱們界面上只要顯示10個字段,客戶端用WEB service來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時咱們就能夠用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端之後,若是用這個對象來對應界面顯示,那此時它的身份就轉爲VO.get
用於表示一個數據傳輸對象。DTO 一般用於不一樣服務或服務不一樣分層之間的數據傳輸。DTO 與 VO 概念類似,而且一般狀況下字段也基本一致。但 DTO 與 VO 又有一些不一樣,這個不一樣主要是設計理念上的,好比 API 服務須要使用的 DTO 就可能與 VO 存在差別。一般遵照 Java Bean 的規範,擁有 getter/setter 方法
這個你們最熟悉,和上面幾個O區別最大,基本沒有互相轉化的可能性和必要.,主要用來封裝對數據庫的訪問。經過它能夠把POJO持久化爲PO,用PO組裝出來VO、DTO;
用於表示一個數據訪問對象。使用 DAO 訪問數據庫,包括插入、更新、刪除、查詢等操做,與 PO 一塊兒使用。DAO 通常在持久層,徹底封裝數據庫操做,對外暴露的方法使得上層應用不須要關注數據庫相關的任何信息。
POJO(Plain ordinary java object) 簡單java對象
一個POJO持久化之後就是PO;直接用它傳遞、傳遞過程當中就是DTO;直接用來對應表示層就是VO。
做者:summer_sunrise
原文:https://blog.csdn.net/uestcym...