1、POJO
POJO(Plain Old Java Object)這種叫法是Martin Fowler、Rebecca Parsons和Josh MacKenzie在2000年的一次演講的時候提出來的。按照Martin Fowler的解釋是“Plain Old Java Object”,從字面上翻譯爲“純潔老式的java對象”,但大家都使用“簡單java對象”來稱呼它。
POJO的內在含義是指那些:
有一些private的參數作爲對象的屬性,然後針對每一個參數定義get和set方法訪問的接口。
沒有從任何類繼承、也沒有實現任何接口,更沒有被其它框架侵入的java對象。
public class User { private String name; private int age; 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; } }
2、JavaBean
JavaBean 是一種JAVA語言寫成的可重用組件。JavaBean符合一定規範編寫的Java類,不是一種技術,而是一種規範。大家針對這種規範,總結了很多開發技巧、工具函數。符合這種規範的類,可以被其它的程序員或者框架使用。它的方法命名,構造及行爲必須符合特定的約定:
1、所有屬性爲private。
2、這個類必須有一個公共的缺省構造函數。即是提供無參數的構造器。
3、這個類的屬性使用getter和setter來訪問,其他方法遵從標準命名規範。
4、這個類應是可序列化的。實現serializable接口。
因爲這些要求主要是靠約定而不是靠實現接口,所以許多開發者把JavaBean看作遵從特定命名約定的POJO。
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其實是比javabean更純淨的簡單類或接口。POJO嚴格地遵守簡單對象的概念,而一些JavaBean中往往會封裝一些簡單邏輯。
pojo的格式是用於數據的臨時傳遞,它只能裝載數據, 作爲數據存儲的載體,而不具有業務邏輯處理的能力。
而javabean雖然數據的獲取與pojo一樣,但是javabean當中可以有其它的方法。
3、DAO
DAO(data access objects)
DAO是數據訪問對象,DAO一般有接口和該接口的實現類,接口用於規範實現類。實現類一般用於操作數據庫,如對數據庫進行修改、添加、刪除等操作,一般直接調用公共類DAO。
什麼是DTO(data transfer object)、什麼是VO(value object)、什麼是PO(persistent object)?
我們通過DAO將POJO持久化爲PO,用PO組裝出來VO、DTO。
總結下,我認爲一個對象究竟是什麼O要看具體環境,在不同的層、不同的應用場合,對象的身份也不一樣,而且對象身份的轉化也是很自然的。就像你對老婆來說就是老公,對父母來說就是子女。設計這些概念的初衷不是爲了唬人而是爲了更好的理解和處理各種邏輯,讓大家能更好的去用面向對象的方式處理問題。
比如:我們一張表有100個字段,那麼對應的PO就有100個屬性。但是我們界面上只要顯示10個字段,客戶端用WEBservice來獲取數據,沒有必要把整個PO對象傳遞到客戶端,這時我們就可以用只有這10個屬性的DTO來傳遞結果到客戶端,這樣也不會暴露服務端表結構.到達客戶端以後,如果用這個對象來對應界面顯示,那此時它的身份就轉爲VO。
什麼是BO(business object)?
BO: POJO在業務層的體現,對於業務操作來說,更多的是從業務上來包裝對象,如一個User的BO,可能包括name, age, sex, privilege, group等,這些屬性在數據庫中可能會在多張表中,因爲每一張表對應一個PO,而我們的BO需要這些PO組合起來(或說重新拼裝)才能成爲業務上的一個完整對象。
4、EJB
EJB(Enterprise JavaBean): 我認爲它是一組"功能"JavaBean的集合。上面說了JavaBean是實現了一種規範的Java對象。這裏說EJB是一組JavaBean,的意思是這一組JavaBean組合起來實現了某個企業組的業務邏輯。這裏的一組JavaBean不是亂組合的,它們要滿足能實現某項業務功能的搭配。找個比方,對於一身穿着來說,包括一頂帽子,一件衣服,一條褲子,兩隻鞋。這穿着就是EJB,其它的就是一個JavaBean
SSH與EJB區別
EJB是一種javabean的組合規範,SSH是3個框架jar包的組合。
EJB本身是JavaEE的規範由容器廠商負責實現,也就是使用EJB,需要使用JavaEE服務器。而用SSH,直接用Web服務器, SSH中要解決的目標和EJB是一致的。EJB是大型的,SSH是輕量級的。