Java開(kāi)發(fā)過(guò)程中,基本實(shí)體類包都以entity或者model來(lái)稱呼,可是不少項(xiàng)目中,卻以Bo、Vo來(lái)命名,面試的時(shí)候,也有可能被問(wèn)到這些問(wèn)題。那么,這幾者分別代表什么意思呢?
Entity
最常用實(shí)體類,基本和數(shù)據(jù)表一一對(duì)應(yīng),一個(gè)實(shí)體一張表。
Bo(business object)
代表業(yè)務(wù)對(duì)象的意思,Bo就是把業(yè)務(wù)邏輯封裝為一個(gè)對(duì)象(注意是邏輯,業(yè)務(wù)邏輯),這個(gè)對(duì)象可以包括一個(gè)或多個(gè)其它的對(duì)象。通過(guò)調(diào)用Dao方法,結(jié)合Po或Vo進(jìn)行業(yè)務(wù)操作。
形象描述為一個(gè)對(duì)象的形為和動(dòng)作,當(dāng)然也有涉及到基它對(duì)象的一些形為和動(dòng)作。比如處理一個(gè)人的業(yè)務(wù)邏輯,該人會(huì)睡覺(jué),吃飯,工作,上班等等行為,還有可能和別人發(fā)關(guān)系的行為,處理這樣的業(yè)務(wù)邏輯時(shí),我們就可以針對(duì)BO去處理。
再比如投保人是一個(gè)Po,被保險(xiǎn)人是一個(gè)Po,險(xiǎn)種信息也是一個(gè)Po等等,他們組合起來(lái)就是一張保單的Bo。
Vo(value object)
代表值對(duì)象的意思,通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,由new創(chuàng)建,由GC回收。
主要體現(xiàn)在視圖的對(duì)象,對(duì)于一個(gè)WEB頁(yè)面將整個(gè)頁(yè)面的屬性封裝成一個(gè)對(duì)象,然后用一個(gè)VO對(duì)象在控制層與視圖層進(jìn)行傳輸交換。

Po(persistant object)
代表持久層對(duì)象的意思,對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的字段,數(shù)據(jù)庫(kù)表中的記錄在java對(duì)象中的顯示狀態(tài),最形象的理解就是一個(gè)PO就是數(shù)據(jù)庫(kù)中的一條記錄。
好處是可以把一條記錄作為一個(gè)對(duì)象處理,可以方便的轉(zhuǎn)為其它對(duì)象。Vo和Po,都是屬性加上屬性的get和set方法;表面看沒(méi)什么不同,但代表的含義是完全不同的。
Dto(data transfer object)
代表數(shù)據(jù)傳輸對(duì)象的意思
是一種設(shè)計(jì)模式之間傳輸數(shù)據(jù)的軟件應(yīng)用系統(tǒng),數(shù)據(jù)傳輸目標(biāo)往往是數(shù)據(jù)訪問(wèn)對(duì)象從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)
數(shù)據(jù)傳輸對(duì)象與數(shù)據(jù)交互對(duì)象或數(shù)據(jù)訪問(wèn)對(duì)象之間的差異是一個(gè)以不具任何行為除了存儲(chǔ)和檢索的數(shù)據(jù)(訪問(wèn)和存取器)
簡(jiǎn)而言之,就是接口之間傳遞的數(shù)據(jù)封裝
表里面有十幾個(gè)字段:id,name,gender(M/F),age……
頁(yè)面需要展示三個(gè)字段:name,gender(男/女),age
DTO由此產(chǎn)生,一是能提高數(shù)據(jù)傳輸?shù)乃俣?減少了傳輸字段),二能隱藏后端表結(jié)構(gòu)
Pojo(plian ordinary java object)
代表簡(jiǎn)單無(wú)規(guī)則java對(duì)象
純的傳統(tǒng)意義的java對(duì)象,最基本的Java Bean只有屬性加上屬性的get和set方法
可以額轉(zhuǎn)化為PO、DTO、VO;比如POJO在傳輸過(guò)程中就是DTO
Dao(data access object)
代表數(shù)據(jù)訪問(wèn)對(duì)象的意思,是sun的一個(gè)標(biāo)準(zhǔn)j2ee設(shè)計(jì)模式的接口之一,負(fù)責(zé)持久層的操作 。這個(gè)基本都了解,Dao和上面幾個(gè)O區(qū)別最大,基本沒(méi)有互相轉(zhuǎn)化的可能性和必要,主要用來(lái)封裝對(duì)數(shù)據(jù)的訪問(wèn),注意,是對(duì)數(shù)據(jù)的訪問(wèn),不是對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。
Controller
代表控制層,主要是Action/Servlet等構(gòu)成(Spring MVC則是通過(guò)@Controller標(biāo)簽使用)此層業(yè)務(wù)層與視圖層打交道的中間層,負(fù)責(zé)傳輸VO對(duì)象和調(diào)用BO層的業(yè)務(wù)方法,負(fù)責(zé)視圖層請(qǐng)求的數(shù)據(jù)處理后響應(yīng)給視圖層。
View
代表視圖層的意思,主要是指由JSP、HTML等文件形成的顯示層。
所以實(shí)際項(xiàng)目中,一般都是這樣應(yīng)用的:
控制層(controller-action),業(yè)務(wù)層/服務(wù)層( bo-manager-service),實(shí)體層(po-entity),dao(dao),視圖對(duì)象(Vo-),視圖層(view-jsp/html)
暫時(shí)理解不是很深刻,以后再改!