springboot第6集:PO、VO、DAO、BO、DTO、POJO 能分清嗎?

語言: CN / TW / HK

領域模型命名規約:

  • 資料物件:xxxDO,xxx即為資料表名
  • 資料傳輸物件:xxxDTO,xxx為業務領域相關的名稱。
  • 展示物件:xxxVO,xxx一般為網頁名稱。
  • POJO是DO/DTO/BO/VO的統稱,禁止命名成xxxPOJO。

PO、VO、DAO、BO、DTO、POJO

  • PO (Persistent Object): 持久化物件,用於表示資料庫中的資料記錄,通常與資料庫表的結構相對應,以便進行 CRUD (建立、讀取、更新、刪除) 操作。
  • VO (Value Object): 值物件,用於表示業務邏輯中的資料物件,通常用於在層之間傳輸資料。
  • DAO (Data Access Object): 資料訪問物件,用於封裝資料訪問邏輯,隱藏底層資料儲存細節,提供一組操作資料的方法。
  • BO (Business Object): 業務物件,用於封裝業務邏輯,通常反映業務流程或業務實體。BO 可以使用 DAO 和 DTO 進行資料操作和傳輸。
  • DTO (Data Transfer Object): 資料傳輸物件,用於在系統層之間傳輸資料,通常包含多個欄位,可以用於批量傳輸資料。
  • POJO (Plain Old Java Object): 簡單的 Java 物件,是一個特定型別的類,沒有任何限制或附加條件,可以用於表示各種資料。

需要注意的是,這些縮寫詞的具體定義可能因專案而異,因此在具體專案中應該根據團隊約定和實際需求來使用。

分層領域模型規約

分層領域模型規約是一種常用於軟體開發中的設計模式,它將整個系統分成多個層次,每個層次負責處理不同的任務。下面是分層領域模型規約中的幾個關鍵概念:

  1. 領域層(Domain Layer):負責定義業務邏輯和資料持久化操作,並提供 API 給其他應用程式層使用。
  2. 應用程式層(Application Layer):負責協調領域層和表示層之間的互動,並通過定義服務介面,向表示層暴露業務邏輯。
  3. 表示層(Presentation Layer):負責呈現資料給使用者,並將使用者輸入傳遞給應用程式層進行處理。
  4. 資料訪問層(Data Access Layer):負責與資料庫進行互動,包括讀取、寫入、更新和刪除等操作。

在實踐中,分層領域模型規約可以有不同的變體。比如,可以將應用程式層和表示層合二為一,也可以將資料訪問層和領域層混合在一起。總之,這種設計模式旨在提高程式碼的可維護性、可擴充套件性和可測試性,使系統更易於理解和修改。

PO :(persistant object ),持久物件

PO(Persistent Object)是指一種在程式執行期間始終存在的物件,與臨時物件(Transient Object)不同,它們會在程式執行完成後被銷燬。持久物件通常與資料庫互動,可以被儲存和檢索。

在面向物件程式設計中,持久化是指將物件的狀態儲存到某個非易失性儲存介質中,以便在程式結束後能夠重新恢復物件狀態。持久物件是一種特殊的物件,它們具有永續性,即它們的狀態可以被永久地儲存。這使得程式能夠在程式關閉並重新啟動後恢復之前的狀態。

在實際應用中,我們可以通過使用 ORM(Object-Relational Mapping)框架來簡化持久化操作。ORM框架隱藏了底層資料庫的細節,使得開發者可以以面向物件的方式來進行資料訪問和操作,提高了程式碼的可讀性和可維護性。

可以看成是與資料庫中的表相對映的java物件。使用Hibernate來生成PO是不錯的選擇。

VO :(value object) ,值物件

VO(Value Object)又稱為值物件,是指一種不可變的、僅由屬性值構成的物件。它的主要作用是描述某個特定的領域概念,比如日期、時間、貨幣等,或者是一些複合型別的資料結構。

與 PO(Persistent Object)不同,VO 並不具有持久化能力,它們通常用於封裝值或資料,以便在應用程式中進行傳遞和處理。VO 物件通常被設計成不可變的,這意味著它們的狀態不能被修改,因此可以確保物件的一致性和可靠性。

值物件通常具有以下特徵:

  1. 不可變性:值物件一旦建立,其狀態就不再改變,所有的屬性都是隻讀的。
  2. 沒有標識:值物件的相等性是通過其屬性來確定的,沒有唯一的識別符號。
  3. 可以被共享:多個物件可以引用同一個值物件,因為它們的狀態是不可變的。

在實踐中,值物件經常用於封裝一些簡單的、基礎的資料型別,比如字串、數字等,以及一些複雜的資料結構,比如集合、列表、樹等。值物件能夠增加程式碼的可讀性和可維護性,同時還能減少出錯的機會。

通常用於業務層之間的資料傳遞,和PO一樣也是僅僅包含資料而已。但應是抽象出的業務物件,可以和表對應,也可以不,這根據業務的需要。

PO只能用在資料層,VO用在商業邏輯層和表示層。各層操作屬於該層自己的資料物件,這樣就可以降低各層之間的耦合,便於以後系統的維護和擴充套件。

DAO :(Data Access Objects) ,資料訪問物件介面

DAO(Data Access Objects)是一種資料訪問物件介面,它提供了對某個特定資料來源(比如關係資料庫、文字檔案等)的訪問操作。DAO 通常用於將底層資料儲存細節與上層業務邏輯分離,從而提高程式碼的可重用性和可維護性。

DAO 介面主要包括以下幾個方面:

  1. CRUD 操作:DAO 介面提供了增刪改查等基本的資料操作方法。這些方法通常涉及到 SQL 語句的構建、引數型別轉換、結果集的對映等操作。
  2. 事務控制:DAO 介面可以為業務邏輯中需要進行事務控制的方法提供支援。事務控制可以保證資料的一致性和可靠性。
  3. 異常處理:DAO 介面應該能夠處理底層資料儲存引發的異常,並將異常傳遞給呼叫者,以便做出相應的處理。
  4. 抽象化:DAO 介面使得業務邏輯能夠獨立於具體的資料儲存實現,從而提高了程式碼的可移植性和可測試性。

在實際應用中,我們可以通過使用 ORM(Object-Relational Mapping)框架來簡化 DAO 的實現。ORM 框架可以自動地生成 SQL 語句、對映查詢結果等操作,從而減少了開發者的工作量。同時,在設計 DAO 介面時,還需要考慮資料儲存的安全性、效能等因素,以確保應用程式能夠正常執行和適應不斷變化的業務需求。

BO :(Business Object),業務物件層

BO(Business Object)指的是業務物件層,它是位於應用程式中介於 DAO 層和 Presentation 層之間的一層。BO 層主要負責處理業務邏輯、協調各個元件之間的互動以及與 Presentation 層進行資料互動。

BO 層通常包含以下幾個方面:

  1. 業務邏輯處理:BO 層負責實現業務規則和流程,如資料校驗、計算、轉換等操作。這些業務邏輯可能涉及到多個底層資料來源的操作,需要通過呼叫 DAO 介面來實現。
  2. 事務控制:BO 層也可以提供事務控制的功能,以確保業務操作的原子性和一致性。BO 層可以將底層 DAO 操作組合成一個完整的事務,並在必要的時候進行回滾操作。
  3. 物件對映:BO 層負責將底層資料儲存的資料模型與上層 Presentation 層的檢視模型進行對映。這意味著 BO 層需要處理物件的轉換、持久化、序列化等操作。
  4. 協調各個元件:BO 層作為應用程式的中間層,需要協調 Presentation 層、DAO 層、第三方服務元件等各個元件之間的互動。BO 層可以處理這些元件之間的通訊,從而減少 Presentation 層和 DAO 層之間的耦合度。

在實踐中,BO 層通常由一些業務邏輯比較複雜的方法組成,這些方法可能會對多個數據庫表進行操作,並且需要進行一定的物件對映和轉換。BO 層可以將 Presentation 層與 DAO 層分離,使得應用程式更加易於維護和擴充套件。

DTO Data Transfer Object資料傳輸物件

DTO(Data Transfer Object)是一種資料傳輸物件,用於在各個層之間傳輸資料。DTO 通常包含了多個屬性,這些屬性與某個業務邏輯相關聯,並且可能來自於多個數據源。

DTO 主要有以下幾個方面的作用:

  1. 資料傳輸:DTO 物件用於在 Presentation 層和 BO 層、BO 層和 DAO 層之間傳輸資料。DTO 物件可以將底層資料儲存的資料模型轉換成上層業務邏輯需要的檢視模型,從而實現資料的傳輸和互動。
  2. 減少網路負載:DTO 物件可以減少網路負載,因為它們只包含最小必要的屬性資訊。這使得資料傳輸過程變得更加高效,特別是在分散式系統中。
  3. 隱藏底層資料結構:DTO 物件可以隱藏底層資料結構的細節,從而提高程式碼的可維護性和可擴充套件性。DTO 物件可以封裝底層資料結構,使得上層元件不必關心資料結構的具體實現細節。
  4. 可序列化:DTO 物件可以被序列化和反序列化,從而在不同程序或者不同機器之間進行資料傳輸。這使得使用 DTO 物件可以實現跨平臺的資料傳輸。

在實踐中,DTO 物件通常由開發者手動編寫,這些物件的型別和屬性應該與業務邏輯密切相關。DTO 物件應該儘量簡單,並且只包含必需的屬性資訊,避免資料冗餘和網路負載過大的問題。同時,在設計 DTO 物件時,開發者還需要考慮物件的可重用性和擴充套件性,以滿足不斷變化的業務需求。

POJO :(Plain Old Java Objects),簡單的Java物件

POJO(Plain Old Java Objects)指的是簡單的 Java 物件,它們是一種沒有任何限制的普通 Java 物件,不依賴於特定的框架或介面。POJO 物件通常不包含任何專有的基類或介面,也不需要遵循任何提前定義的規則或契約。

POJO 物件主要具有以下幾個特點:

  1. 簡單性:POJO 物件非常簡單,通常只包含資料屬性和訪問方法。
  2. 可重用性:由於 POJO 物件沒有特定的依賴關係和規範,因此它們可以輕鬆地在不同的應用程式中進行復用。
  3. 可測試性:POJO 物件不依賴於任何特定的框架或介面,因此可以輕鬆地進行單元測試和整合測試。
  4. 可擴充套件性:由於 POJO 物件沒有任何預定的規則或契約,因此可以根據業務需求進行靈活的擴充套件和修改。

POJO 物件在 Java 開發中非常常見,它們被廣泛應用於各種領域,比如企業應用、Web 開發、移動應用等。通過使用 POJO 物件,開發者可以使程式碼更加簡單、可重用、可測試和可擴充套件,從而提高開發效率和程式碼質量。