JavaBean、POJO、VO、DTO、DO、PO之間的區別


之前對於vo,JavaBean,pojo等實體類之間的概念和關系很模糊,不清楚他們都用在什么位置.今天我們就來談談這些不同的實體類.

一、avaBean,其實准確地說JavaBean是符合一定規范編寫出來的Java類,這些特定的約定包括:

1.類中所有的屬性都是私有屬性(private)

2.類中必須有一個無參的構造器

3.類中每個屬性有其對應的getter和setter方法

4.類實現序列化接口(serializable)

5.類中可以存在其他的方法

下面是一個典型的JavaBean類:

import java.io.Serializable;

public class People implements Serializable {//實現序列化接口
    private static final long serialVersionUID = -3641410835329960076L;
    private String name;
    private Integer age;
    //無參構造器
    public People() {
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
    //此外,JavaBean內部還可以定義其他方法
    public String getNickname(){
        return "我的外號是狼少年";
    }
}

二、Pojo(Plain Ordinary Java Object)

翻譯過來即是普通Java對象,其特點:

1.類中只有一些屬性及其對應的getter和setter方法.

2.類中沒有業務邏輯,也就不具備處理業務邏輯的能力.

3.Pojo主要作為數據存儲的載體來進行數據的臨時傳遞.

4.Pojo不繼承任何類,也沒有實現任何接口.

下面舉例:

public class People {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

三、第三部分將VO,DTO,DO,PO放在一起說明

首先分別簡述以上四者的概念

1.VO (View Object)屬於視圖對象,對應頁面所顯示的數據,並將所有數據進行封裝,類中屬性和和數據庫表一一對應,也可以不對應,具體看業務需求

2.DTO(Data Transfer Object) 屬於數據傳輸對象,主要是視圖層與服務層之間的數據傳輸,多數情況下,DTO內的數據來自多個表

3.DO(Domain Object) 屬於領域對象,可以理解為抽象出來的有形或者無形的業務實體類

4.PO(Persistent Object) 屬於持久化對象,也被稱為Data對象,其屬性與數據庫中表字段形成映射關系,也就是說PO的每一個屬性都對應數據庫表中的每一個字段

說完概念,感覺還是一臉懵逼,不過對於這四者之間的關系,我在網上找到了一幅圖

大致描述一下圖中的流程:

首先,客戶端發送了一個請求,比如說是一個表單的提交,那么表單內所包含的數據,在視圖層就稱為VO.VO傳遞到視圖層后,視圖層將VO轉為DTO傳送到服務層.然后服務層會將DTO轉為DO,調用DO的業務方法完成具體業務,緊接着,服務層再把DO轉為PO傳遞給持久層,完成持久化.逆向同理.

其實VO和DOT的屬性基本是一樣的,之所以有着不同的叫法,是從設計層角度來說的.VO表示的是視圖層顯示的所有數據,而DOT表示的則是服務層接收和返回的數據.

四、VO,DTO,DO,PO與第二部分所說的Pojo之間又是什么關系呢?

這里需要強調的是DO,它比較特殊的, DO具有業務方法邏輯,如果直接把DO傳遞給視圖層,展示層的代碼就可以繞過服務層直接調用它不應該訪問的操作.所以DO不是簡單的Pojo,而其他三者其實通常來說,都是由Pojo轉化而來的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM