POJO,JAVABEAN,Entity,domain,DTO,ejb區別
在網上搜索過所有名詞的定義後,我總結了下面這張表
應該把java中一些對象縮寫都說明白了
2018.04.21
類型 | 定義 | 作用 | 其他 |
pojo | (Plain Ordinary Java Object)簡單的Java對象 | 普通JavaBeans,有時可以作為VO(value-object)或DTO(Data Transfer Object)來使用 | |
javabean | 為寫成JavaBean,類必須是具體和公共的,並且具有無參數的構造器。 | 簡單的就是pojo,復雜的就是ejb | |
ejb | EJB(Enterprise JavaBean),定義用於開發基於組件的企業多重應用程序標準 | java的核心代碼,分別是回話Bean(Session Bean)、實體Bean(Entity Bean)、和消息驅動Bean(MessageDriven Bean) | |
domain | domain是範圍,界線,也被用來批一個變量的有效作用域 | 也常用這個詞做一個包,然後在裏面放些DAO類文件. net.baidu.domain.AddUserDao | |
dto | 數據傳輸對象(Data Transfer Object),是一種設計模式之間傳輸數據的對象 | 數據傳輸目標往往是數據訪問對象從數據庫中檢索數據,從PO中取值進行傳輸 | |
entity | 實體bean,一般是用於ORM對象關系映射 | 一個實體映射成一張表,一般無業務邏輯代碼。 | |
po | persistant object持久對象 | 最形象的理解就是一個PO就是數據庫中的一條記錄,如hibernate中的一個持久化對象 | |
vo | ViewObject表現層對象 | 主要對應界面顯示的數據對象。對於一個WEB頁面,用一個VO對象對應整個界面的值。 | |
dao | data access object數據訪問對象 | 主要用來封裝對數據庫的訪問,包含了各種數據庫的操作方法。通過它可以把POJO持久化為PO,用PO組裝出來VO、DTO | |
bo | business object業務對象 | 主要作用是把業務邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。 |
BO:business object業務對象
主要作用是把業務邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。比如一個簡歷,有教育經歷、工作經歷、 關系等等。
我們可以把教育經歷對應一個PO,工作經歷對應一個PO, 關系對應一個PO。
建立一個對應簡歷的BO對象處理簡歷,每個BO包含這些PO。這樣處理業務邏輯時,我們就可以針對BO去處理。
DTO :Data Transfer Object數據傳輸對象,主要用於遠程調用等需要大量傳輸對象的地方。
比如我們一張表有100個字段,那麽對應的PO就有100個屬性。但是我們界面上只要顯示10個字段,
客戶端用WEB service來獲取數據,沒有必要把整個PO對象傳遞到客戶端,
這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端以後,如果用這個對象來對應界面顯示,那此時它的身份就轉為VO
VO、PO、FormBean之間的區別:
VO是獨立的Java Object;而PO是Hibernate納入其實體容器(Entity Map)的對象。
PO代表了與數據庫中某條記錄相對應的Hibernata實體,PO的變化在事務提交時將反映到實際的數據庫中。
FormBean只是HTML中表單的封裝,是為了弱化request中存儲數據的作用,將request對象的get()方法轉化為對象的存取值。
VO和PO在結構上看,沒什麽區別。但從本質上看是完全不同的。
VO由new關鍵字創建,由GC回收。PO則是向數據庫中添加新數據時創建,刪除數據庫中數據時刪除,並且它只能存活在一個數據庫連接中,斷開連接即被銷毀。
VO是業務對象,由業務邏輯使用,它存活的目的就是為數據提供一個生存的地方。PO則是數據對象的表現,它可以簡化對象數據與物理數據的轉換。
VO的屬性根據當前的業務不同而不同。PO的屬性則是跟數據庫表的字段一一對應。PO對象需要實現序列化接口。
在Hibernate中,最核心的概念就是對PO的狀態管理。一個PO有三種狀態:
1.未被持久化的VO,此時就是一個內存對象VO,由JVM管理生命周期。
2.已被持久化的PO,並且在Session生命周期內,此時映射數據庫連接,由數據庫管理生命周期。
3.曾被持久化過,但現在和Session已經托管(detached)了,以VO的身份在運行。它還可以進入另一個Session,繼續PO狀態管理。
需要註意的是, PO最好只在持久層使用,如果脫離持久層到處使用,會給Hibernate帶來不小的PO對象維護開銷。
POJO,JAVABEAN,Entity,domain,DTO,ejb區別