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