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 對象,開發者可以使代碼更加簡單、可重用、可測試和可擴展,從而提高開發效率和代碼質量。