1. 概念及理解
PO、DTO、VO、BO都叫POJO,就是個簡單的java對象。這些概念用於描述對象的類型;由於java是面向對象的語言;程序的世界就是各個對象之間的“交互”;在交互的過程中會存在多個層次,每個層次中所擁有的內容都是不一樣的;
- PO(Persistant Object)持久化對象。
用於表示數據庫中的一條記錄映射成的java對象。PO僅僅用於表示數據,沒有任何數據操作。通常遵守Java Bean的規范,用於getter/setter方法。可以理解是一個PO就是數據庫中的一條記錄;可以理解某個事物依賴的原始數據;好處是可以將一條記錄作為一個對象處理,可以方便轉化其他對象。
- BO(Business Object)業務對象
封裝對象、復雜對象,里面可能包含多個類,主要作用是把業務邏輯封裝為一個對象,常常封裝了對DAO、RPC等的調用,可以進行PO與VO/DTO之間的轉換。BO通常位於業務層,要區別於直接對外提供服務的服務層。BO提供了基本業務單元的基本業務操作,在設計上屬於被服務層業務流程調用的對象,一個業務流程可能需要調用多個BO來完成。
比如一個簡歷,有教育經歷、工作經歷、社會關系等等。我們可以把教育經歷對應一個PO、工作經歷對一個PO、社會關系對應一個PO。建立一個對應簡歷的BO對象處理簡歷,每個BO包含這些PO。這里處理業務邏輯時,我們就可以針對BO去處理。
- VO(View Object)表現對象
用於表示一個與前端進行交互的java對象。這里的VO只包含前端需要展示的數據即可,對於前端不需要的數據,比如數據創建和修改的時間等字段,出於減少傳輸數據量大小和保護數據庫結構不外泄的目的,不應該在VO中體現出來。通常遵守Java Bean的規范,擁有getter/setter方法。
視圖對象,用於展示層。VO的作用是把某個指定頁面(或組件)的所有數據封裝起來。而不用做前端WEB頁面調用后端的是傳數據。
- DTO(Data Transfer Object)數據傳輸對象
這個概念來源於J2EE的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用於展示層(Controller)和服務層(Service)之間的數據傳輸對象。
前端調用時傳輸;也可理解成”上層“調用時傳輸;DTO一般是前端和后端以各種方式傳遞數據
- DAO (Data access object)數據訪問對象
主要用來封裝數據庫的訪問。通過它可以把POJO持久化為PO,用PO組裝出來VO、DTO;用於表示一個數據訪問對象。使用DAO訪問數據庫,包括插入、更新、刪除、查詢等操作,與PO一起使用。DAO一般在持久層,完全封裝數據庫操作,對外暴露的使得上層應用不需要關注數據庫相關的任何信息。
- DO (Domain Object) 領域對象
就是從現實世界中抽象出來的有形或無形的業務實體。一般和數據中的表結構對應。
【參考資料】
https://blog.csdn.net/uestcyms/article/details/80244407 Java中常見的對象類型簡述(DO、BO、DTO、VO、AO、PO)
https://www.zhihu.com/question/39651928 PO BO VO DTO POJO DAO DO這些Java中的概念分別指一些什么?
https://www.hollischuang.com/archives/553 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念