搬運自https://www.toutiao.com/i6690745946910753293/
Java開發(fā)過程中捕传,基本實體類包都以entity或者model來稱呼沉帮,可是不少項目中垂蜗,卻以Bo、Vo來命名,面試的時候废岂,也有可能被問到這些問題。那么狱意,這幾者分別代表什么意思呢湖苞?
Entity
最常用實體類,基本和數(shù)據(jù)表一一對應(yīng)髓涯,一個實體一張表袒啼。
Bo(business object)
代表業(yè)務(wù)對象的意思,Bo就是把業(yè)務(wù)邏輯封裝為一個對象(注意是邏輯纬纪,業(yè)務(wù)邏輯)蚓再,這個對象可以包括一個或多個其它的對象。通過調(diào)用Dao方法包各,結(jié)合Po或Vo進行業(yè)務(wù)操作摘仅。
形象描述為一個對象的形為和動作,當然也有涉及到基它對象的一些形為和動作问畅。比如處理一個人的業(yè)務(wù)邏輯娃属,該人會睡覺六荒,吃飯,工作矾端,上班等等行為掏击,還有可能和別人發(fā)關(guān)系的行為,處理這樣的業(yè)務(wù)邏輯時秩铆,我們就可以針對BO去處理砚亭。
再比如投保人是一個Po,被保險人是一個Po殴玛,險種信息也是一個Po等等捅膘,他們組合起來就是一張保單的Bo。
Vo(value object)
代表值對象的意思滚粟,通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞寻仗,由new創(chuàng)建,由GC回收凡壤。
主要體現(xiàn)在視圖的對象署尤,對于一個WEB頁面將整個頁面的屬性封裝成一個對象,然后用一個VO對象在控制層與視圖層進行傳輸交換鲤遥。
Po(persistant object)
代表持久層對象的意思究孕,對應(yīng)數(shù)據(jù)庫中表的字段,數(shù)據(jù)庫表中的記錄在java對象中的顯示狀態(tài)爹凹,最形象的理解就是一個PO就是數(shù)據(jù)庫中的一條記錄厨诸。
好處是可以把一條記錄作為一個對象處理,可以方便的轉(zhuǎn)為其它對象禾酱。Vo和Po微酬,都是屬性加上屬性的get和set方法;表面看沒什么不同颤陶,但代表的含義是完全不同的颗管。
Dto(data transfer object)
代表數(shù)據(jù)傳輸對象的意思
是一種設(shè)計模式之間傳輸數(shù)據(jù)的軟件應(yīng)用系統(tǒng),數(shù)據(jù)傳輸目標往往是數(shù)據(jù)訪問對象從數(shù)據(jù)庫中檢索數(shù)據(jù)
數(shù)據(jù)傳輸對象與數(shù)據(jù)交互對象或數(shù)據(jù)訪問對象之間的差異是一個以不具任何行為除了存儲和檢索的數(shù)據(jù)(訪問和存取器)
簡而言之滓走,就是接口之間傳遞的數(shù)據(jù)封裝
表里面有十幾個字段:id垦江,name,gender(M/F)搅方,age……
頁面需要展示三個字段:name比吭,gender(男/女)绽族,age
DTO由此產(chǎn)生,一是能提高數(shù)據(jù)傳輸?shù)乃俣?減少了傳輸字段)衩藤,二能隱藏后端表結(jié)構(gòu)
Pojo(plian ordinary java object)
代表簡單無規(guī)則java對象
純的傳統(tǒng)意義的java對象吧慢,最基本的Java Bean只有屬性加上屬性的get和set方法
可以額轉(zhuǎn)化為PO、DTO慷彤、VO娄蔼;比如POJO在傳輸過程中就是DTO
Dao(data access object)
代表數(shù)據(jù)訪問對象的意思,是sun的一個標準j2ee設(shè)計模式的接口之一底哗,負責持久層的操作 。這個基本都了解锚沸,Dao和上面幾個O區(qū)別最大跋选,基本沒有互相轉(zhuǎn)化的可能性和必要,主要用來封裝對數(shù)據(jù)的訪問哗蜈,注意前标,是對數(shù)據(jù)的訪問,不是對數(shù)據(jù)庫的訪問距潘。
Controller
代表控制層炼列,主要是Action/Servlet等構(gòu)成(Spring MVC則是通過@Controller標簽使用)此層業(yè)務(wù)層與視圖層打交道的中間層,負責傳輸VO對象和調(diào)用BO層的業(yè)務(wù)方法音比,負責視圖層請求的數(shù)據(jù)處理后響應(yīng)給視圖層俭尖。
View
代表視圖層的意思,主要是指由JSP洞翩、HTML等文件形成的顯示層稽犁。
所以實際項目中,一般都是這樣應(yīng)用的:
控制層(controller-action)骚亿,業(yè)務(wù)層/服務(wù)層( bo-manager-service)已亥,實體層(po-entity),dao(dao)来屠,視圖對象(Vo-)虑椎,視圖層(view-jsp/html)