1. 縮寫的含義
PO
是 Persistant Object 的縮寫涂籽,用于表示數(shù)據(jù)庫中的一條記錄映射成的 java 對象毯欣。PO 僅僅用于表示數(shù)據(jù)吃型,沒有任何數(shù)據(jù)操作唧瘾。通常遵守 Java Bean 的規(guī)范,擁有 getter/setter 方法缨该。
DAO
是 Data Access Object 的縮寫偎行,用于表示一個(gè)數(shù)據(jù)訪問對象。使用 DAO 訪問數(shù)據(jù)庫贰拿,包括插入蛤袒、更新、刪除膨更、查詢等操作妙真,與 PO 一起使用。DAO 一般在持久層询一,完全封裝數(shù)據(jù)庫操作隐孽,對外暴露的方法使得上層應(yīng)用不需要關(guān)注數(shù)據(jù)庫相關(guān)的任何信息。
VO
是 Value Object 的縮寫健蕊,用于表示一個(gè)與前端進(jìn)行交互的 java 對象菱阵。有的朋友也許有疑問,這里可不可以使用 PO 傳遞數(shù)據(jù)缩功?實(shí)際上晴及,這里的 VO 只包含前端需要展示的數(shù)據(jù)即可,對于前端不需要的數(shù)據(jù)嫡锌,比如數(shù)據(jù)創(chuàng)建和修改的時(shí)間等字段虑稼,出于減少傳輸數(shù)據(jù)量大小和保護(hù)數(shù)據(jù)庫結(jié)構(gòu)不外泄的目的,不應(yīng)該在 VO 中體現(xiàn)出來势木。通常遵守 Java Bean 的規(guī)范蛛倦,擁有 getter/setter 方法。
DTO
是 Data Transfer Object 的縮寫啦桌,用于表示一個(gè)數(shù)據(jù)傳輸對象溯壶。DTO 通常用于不同服務(wù)或服務(wù)不同分層之間的數(shù)據(jù)傳輸及皂。DTO 與 VO 概念相似,并且通常情況下字段也基本一致且改。但 DTO 與 VO 又有一些不同验烧,這個(gè)不同主要是設(shè)計(jì)理念上的,比如 API 服務(wù)需要使用的 DTO 就可能與 VO 存在差異又跛。通常遵守 Java Bean 的規(guī)范碍拆,擁有 getter/setter 方法。
BO
是 Business Object 的縮寫慨蓝,用于表示一個(gè)業(yè)務(wù)對象感混。BO 包括了業(yè)務(wù)邏輯,常常封裝了對 DAO菌仁、RPC 等的調(diào)用浩习,可以進(jìn)行 PO 與 VO/DTO 之間的轉(zhuǎn)換。BO 通常位于業(yè)務(wù)層济丘,要區(qū)別于直接對外提供服務(wù)的服務(wù)層:BO 提供了基本業(yè)務(wù)單元的基本業(yè)務(wù)操作,在設(shè)計(jì)上屬于被服務(wù)層業(yè)務(wù)流程調(diào)用的對象洽蛀,一個(gè)業(yè)務(wù)流程可能需要調(diào)用多個(gè) BO 來完成摹迷。
DO
( Data Object):與數(shù)據(jù)庫表結(jié)構(gòu)一一對應(yīng),通過DAO層向上傳輸數(shù)據(jù)源對象郊供。
POJO
是 Plain Ordinary Java Object 的縮寫峡碉,表示一個(gè)簡單 java 對象。上面說的 PO驮审、VO鲫寄、DTO 都是典型的 POJO。而 DAO疯淫、BO 一般都不是 POJO地来,只提供一些調(diào)用方法。
2. 應(yīng)用
不同類型的對象在架構(gòu)設(shè)計(jì)中用于不同的用途熙掺,如下的分層架構(gòu)表示了各個(gè) POJO 的用途未斑。為什么要在分層架構(gòu)中,定義這些 POJO 對象呢币绩?主要是為了確保各個(gè)分層能夠很好地封裝自己的服務(wù)蜡秽,有效地控制信息的傳播。
試想一下缆镣,如果沒有 VO 和 PO 的區(qū)別芽突,那么數(shù)據(jù)庫表結(jié)構(gòu)的所有字段就一覽無余地展示到了前端,給后臺安全帶來很大的隱患董瞻,并且無法在網(wǎng)絡(luò)傳輸中剝離冗余信息提高了用戶的帶寬成本寞蚌。
3. 實(shí)例
以一個(gè)實(shí)例來探討下 POJO 的使用。假設(shè)我們有一個(gè)面試系統(tǒng),數(shù)據(jù)庫中存儲了很多面試題睬澡,通過 web 和 API 提供服務(wù)固额。可能會做如下的設(shè)計(jì):
數(shù)據(jù)表:表中的面試題包括編號煞聪、題目斗躏、選項(xiàng)、答案昔脯、創(chuàng)建時(shí)間啄糙、修改時(shí)間;PO:包括題目云稚、選項(xiàng)隧饼、答案、創(chuàng)建時(shí)間静陈、修改時(shí)間燕雁;
VO:題目、選項(xiàng)鲸拥、答案拐格、上一題URL、下一題URL刑赶;
DTO:編號捏浊、題目、選項(xiàng)撞叨、答案金踪、上一題編號、下一題編號牵敷;
DAO:數(shù)據(jù)庫增刪改查方法胡岔;
BO:業(yè)務(wù)基本操作。
可以看到劣领,進(jìn)行 POJO 劃分后姐军,我們得到了一個(gè)設(shè)計(jì)良好的架構(gòu),各層數(shù)據(jù)對象的修改完全可以控制在有限的范圍內(nèi)尖淘。
相關(guān)文章: