前言
一個(gè)項(xiàng)目中不一定都能用得上全部的分層規(guī)約,但十分有必要了解每一種的用法,便于去閱讀其他人的代碼。同樣的,雖然遵守規(guī)約寫代碼可能會(huì)略微拉低你寫代碼的速度(PS:多寫一些實(shí)體類),但越是規(guī)范化,模板化的東西,后期的維護(hù)成本和學(xué)習(xí)成本會(huì)越低。
《阿里巴巴Java開發(fā)規(guī)范》關(guān)于領(lǐng)域模型的部分介紹如下
分層領(lǐng)域模型規(guī)約:
DO(Data Object):此對(duì)象與數(shù)據(jù)庫表結(jié)構(gòu)一一對(duì)應(yīng),通過 DAO 層向上傳輸數(shù)據(jù)源對(duì)象。
DTO(Data Transfer Object):數(shù)據(jù)傳輸對(duì)象,Service 或 Manager 向外傳輸?shù)膶?duì)象。
BO(Business Object):業(yè)務(wù)對(duì)象,由 Service 層輸出的封裝業(yè)務(wù)邏輯的對(duì)象。
AO(ApplicationObject):應(yīng)用對(duì)象,在Web層與Service層之間抽象的復(fù)用對(duì)象模型, 極為貼近展示層,復(fù)用度不高。
VO(View Object):顯示層對(duì)象,通常是 Web 向模板渲染引擎層傳輸?shù)膶?duì)象。
Query:數(shù)據(jù)查詢對(duì)象,各層接收上層的查詢請(qǐng)求。注意超過 2 個(gè)參數(shù)的查詢封裝,禁止使用 Map 類來傳輸。
領(lǐng)域模型命名規(guī)約:
數(shù)據(jù)對(duì)象:xxxDO,xxx即為數(shù)據(jù)表名
數(shù)據(jù)傳輸對(duì)象:xxxDTO,xxx為業(yè)務(wù)領(lǐng)域相關(guān)的名稱。
展示對(duì)象:xxxVO,xxx一般為網(wǎng)頁名稱。
POJO:DO/DTO/BO/VO的統(tǒng)稱,禁止命名成xxxPOJO。
PO (persistant object )持久對(duì)象
可以看成是與數(shù)據(jù)庫中的表相映射的java對(duì)象。使用Hibernate來生成PO是不錯(cuò)的選擇。
VO (value object) 值對(duì)象
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,和PO一樣也是僅僅包含數(shù)據(jù)而已。但應(yīng)是抽象出的業(yè)務(wù)對(duì)象,可以和表對(duì)應(yīng),也可以不,這根據(jù)業(yè)務(wù)的需要。
PO只能用在數(shù)據(jù)層,VO用在商業(yè)邏輯層和表示層。各層操作屬于該層自己的數(shù)據(jù)對(duì)象,這樣就可以降低各層之間的耦合,便于以后系統(tǒng)的維護(hù)和擴(kuò)展。
DAO (Data Access Objects) 數(shù)據(jù)訪問對(duì)象接口
DAO是Data Access Object數(shù)據(jù)訪問接口,數(shù)據(jù)訪問:顧名思義就是與數(shù)據(jù)庫打交道。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。J2EE開發(fā)人員使用數(shù)據(jù)訪問對(duì)象(DAO)設(shè)計(jì)模式把底層的數(shù)據(jù)訪問邏輯和高層的商務(wù)邏輯分開。實(shí)現(xiàn)DAO模式能夠更加專注于編寫數(shù)據(jù)訪問代碼。
DAO模式是標(biāo)準(zhǔn)的J2EE設(shè)計(jì)模式之一,開發(fā)人員使用這個(gè)模式把底層的數(shù)據(jù)訪問操作和上層的商務(wù)邏輯分開。一個(gè)典型的DAO實(shí)現(xiàn)有下列幾個(gè)組件:
一個(gè)DAO工廠類;
一個(gè)DAO接口;
一個(gè)實(shí)現(xiàn)DAO接口的具體類;
數(shù)據(jù)傳遞對(duì)象(有些時(shí)候叫做值對(duì)象),具體的DAO類包含了從特定的數(shù)據(jù)源訪問數(shù)據(jù)的邏輯。
BO (Business Object) 業(yè)務(wù)對(duì)象層
表示應(yīng)用程序領(lǐng)域內(nèi)“事物”的所有實(shí)體類。這些實(shí)體類駐留在服務(wù)器上,并利用服務(wù)類來協(xié)助完成它們的職責(zé)。
DTO (Data Transfer Object) 數(shù)據(jù)傳輸對(duì)象
主要用于遠(yuǎn)程調(diào)用等需要大量傳輸對(duì)象的地方。比如我們一張表有100個(gè)字段,那么對(duì)應(yīng)的PO就有100個(gè)屬性。但是我們界面上只要顯示10個(gè)字段,客戶端用WEB service來獲取數(shù)據(jù),沒有必要把整個(gè)PO對(duì)象傳遞到客戶端,這時(shí)我們就可以用只有這10個(gè)屬性的DTO來傳遞結(jié)果到客戶端,這樣也不會(huì)暴露服務(wù)端表結(jié)構(gòu)。到達(dá)客戶端以后,如果用這個(gè)對(duì)象來對(duì)應(yīng)界面顯示,那此時(shí)它的身份就轉(zhuǎn)為VO。
POJO (Plain Old Java Objects) 簡(jiǎn)單的Java對(duì)象
實(shí)際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來,而且簡(jiǎn)稱比較直接。其中有一些屬性及其getter、setter方法的類,有時(shí)可以作為value object或dto(Data Transform Object)來使用。
當(dāng)然,如果你有一個(gè)簡(jiǎn)單的運(yùn)算屬性也是可以的,但不允許有業(yè)務(wù)方法,也不能攜帶有connection之類的方法。
-
封裝
+關(guān)注
關(guān)注
125文章
7593瀏覽量
142146 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3712瀏覽量
64025 -
代碼
+關(guān)注
關(guān)注
30文章
4671瀏覽量
67770
原文標(biāo)題:別亂分層,PO、VO、DAO、BO、DTO、POJO 到底應(yīng)該用在哪里,你知道嗎?
文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論