前言
很多JAVA書都會提到POJO對象,有時候也會說Bean,尤其spring中,所有對象都稱爲Bean,有時候項目中有個vo包、也有model包,這些對象都是怎麼區分的呢?
JavaBean
JavaBean是一種JAVA語言寫成的可重用組件。JavaBean符合一定規範編寫的Java類,不是一種技術,而是一種規範。大家針對這種規範,總結了很多開發技巧、工具函數。符合這種規範的類,可以被其它的程序員或者框架使用。它的方法命名,構造及行爲必須符合特定的約定:
所有屬性爲private。
這個類必須有一個公共的缺省構造函數。即是提供無參數的構造器。
這個類的屬性使用getter和setter來訪問,其他方法遵從標準命名規範。
這個類應是可序列化的。實現serializable接口。
public class UserInfo implements java.io.Serializable{
//實現serializable接口。
private static final long serialVersionUID = 1L;
private String name;
private int age;
//無參構造器
public UserInfo() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//javabean當中可以有其它的方法
public void userInfoPrint(){
System.out.println("");
}
}
POJO
POJO :plain ordinary java object 無規則簡單java對象。有一些private的參數作爲對象的屬性,然後針對每一個參數定義get和set方法訪問的接口。沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的java對象。
POJO其實是比javabean更純淨的簡單類或接口。POJO嚴格地遵守簡單對象的概念,而一些JavaBean中往往會封裝一些簡單邏輯。
POJO主要用於數據的臨時傳遞,它只能裝載數據, 作爲數據存儲的載體,而不具有業務邏輯處理的能力。
/**
* POJO類代碼示例
*/
public class UserInfoPojoDemo {
private int userId;// 用戶帳號
private String pwd;// 用戶密碼
/**
* Constructor
*/
public UserInfoPojoDemo() {
}
public UserInfoPojoDemo(String pwd) {
this.pwd = pwd;
}
public UserInfoPojoDemo(int userId) {
this.userId = userId;
}
public UserInfoPojoDemo(int userId, String pwd) {
this.userId = userId;
this.pwd = pwd;
}
/**
*Access
*/
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
Javabean雖然數據的獲取與POJO一樣,但是javabean當中可以有其它的方法。
一箇中間對象,可以轉化爲PO、DTO、VO。
PO
PO:persistent object 持久對象
1 .有時也被稱爲Data或Model對象,對應數據庫中的entity,可以簡單認爲一個PO對應數據庫中的一條記錄。
2 .在hibernate持久化框架中與insert/delet操作密切相關。
3 .PO中不應該包含任何對數據庫的操作。
VO
VO:value object 值對象 / view object 表現層對象
1 .主要對應頁面顯示(web頁面/swt、swing界面)的數據對象。
2 .可以和表對應,也可以不,這根據業務的需要。
DTO
DTO(TO):Data Transfer Object 數據傳輸對象
1 .用在需要跨進程或遠程傳輸時,它不應該包含業務邏輯。
2 .比如一張表有100個字段,那麼對應的PO就有100個屬性(大多數情況下,DTO內的數據來自多個表)。但view層只需顯示10個字段,沒有必要把整個PO對象傳遞到client,這時我們就可以用只有這10個屬性的DTO來傳輸數據到client,這樣也不會暴露server端表結構。到達客戶端以後,如果用這個對象來對應界面顯示,那此時它的身份就轉爲VO。
BO
BO:business object 業務對象
業務對象主要作用是把業務邏輯封裝爲一個對象。這個對象可以包括一個或多個其它的對象。
比如一個簡歷,有教育經歷、工作經歷、社會關係等等。我們可以把教育經歷對應一個PO,工作經歷對應一個PO,社會關係對應一個PO。
建立一個對應簡歷的BO對象處理簡歷,每個BO包含這些PO。
這樣處理業務邏輯時,我們就可以針對BO去處理。
封裝業務邏輯爲一個對象(可以包括多個PO,通常需要將BO轉化成PO,才能進行數據的持久化,反之,從DB中得到的PO,需要轉化成BO才能在業務層使用)。
關於BO主要有三種概念
1 、只包含業務對象的屬性;
2 、只包含業務方法;
3 、兩者都包含。
在實際使用中,認爲哪一種概念正確並不重要,關鍵是實際應用中適合自己項目的需要。
DAO
DAO:data access object數據訪問對象
1 .主要用來封裝對DB的訪問(CRUD操作)。
2 .通過接收Business層的數據,把POJO持久化爲PO。
以上介紹了JAVA中的一些對象名稱,具體的區別可以視具體的業務而區分。