日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

DO、DTO、BO、VO、POJO區別

作者:Aussise 更新時間: 2024-01-27 編程語言

阿里巴巴開發規約的定義:

POJO(Plain Ordinary Java Object):在本規約中,POJO專指只有setter/getter/toString的簡單類,包括DO/DTO/BO/VO等。

【參考】分層領域模型規約:
  • DO(Data Object):與數據庫表結構一一對應,通過DAO層向上傳輸數據源對象。
  • DTO(Data Transfer Object):數據傳輸對象,Service或Manager向外傳輸的對象。
  • BO(Business Object):業務對象。可以由Service層輸出的封裝業務邏輯的對象。
  • Query:數據查詢對象,各層接收上層的查詢請求。額外規定:【強制】超過2個參數的查詢封裝,禁止使用Map類來傳輸。
  • VO(View Object):顯示層對象,通常是Web向模板渲染引擎層傳輸的對象。

—《阿里巴巴Java開發規約》

詳細各個詞的定義:

DAO: Data Acess Object,數據訪問對象,這個我們不陌生,跟數據庫打交道的系統都會有這樣的DAO類,主要的作用:

  • 封裝對數據庫的訪問,常規的增刪改查(CRUD操作)都通過DAO來實現。

PO/DO:?Persistent Object / Data Object,持久對象 / 數據對象。

  1. 跟數據庫表是一一對應的,一個PO/DO 數據是表的一條記錄。
  2. 以前用Hibernate 的時候PO用的很多,現在普遍喜歡用?DO,這個看各個公司自己的規范。
  3. PO / DO 只是數據的對象,不包含任何的操作。舉個例子,學生表是StudentDO,對學生表的增刪改查等操作就是StudentDAO。

DTO:Data Transfer Object,數據傳輸對象

  1. 在分布式系統中,系統之間可以通過DTO進行數據傳輸;
  2. DTO也可以在應用內部,核心層和應用層之間傳遞數據,DTO只是簡單的數據傳輸,沒有業務邏輯的處理;
  3. 有的場景,比如數據庫表有10個字段,id(唯一id)、version(版本號),gmt_create(記錄創建時間) 這些字段不需要對外提供,所以DTO 可以只取有含義的業務字段,DO是和數據庫記錄的一一映射,但是DTO只需要按照業務需要定義需要的字段。

BO?: Business Object, 業務對象

BO主要作用是把業務邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。

  1. 在領域模型中,BO是個非常重要的概念, BO是最小的業務單元。
  2. BO 包含數據對象(PO/DO)以及對數據的操作。

VO: View Object, 視圖模型,展示層對象

對應頁面顯示(web頁面/移動端H5/Native視圖)的數據對象。

  1. 舉個例子,DTO 中時間Date格式,或者是 yyyyMMddHHmmss的字符串,但是VO需要的是前端展示的格式,需要轉成”yyyy年MM月dd月";

實踐

講了這么多概念,我們再看下實操,先說命名:

領域模型命名規約 1) 數據對象:xxxDO,xxx即為數據表名。 2) 數據傳輸對象:xxxDTO,xxx為業務領域相關的名稱。 3) 展示對象:xxxVO,xxx一般為網頁名稱。 4) POJO是DO/DTO/BO/VO的統稱,禁止命名成xxxPOJO

再以學生檔案管理系統為例,我們現在需要做個學生檔案管理的后臺系統,按照上面的定義,我們能定義出以下一些對象:

如下圖所示:

DB層這里應該叫存儲層,這里只列了DB,還有類似HBase、Redis,泛指儲存數據。

以Student表為例,DB層負責存儲。

  1. DAO層提供了查詢、刪除、寫入的接口;
  2. DO 就是DAO操作的對象,這里是StudentDO,有時候也會省略DO,直接寫Student;
  3. service層或core層是做業務邏輯處理的,比如查詢接口,根據學生學號調用DAO層獲取Student信息,之后做一次數據裁剪,只取業務字段,例如版本號、自增id、數據庫記錄創建時間等非業務字段不取,獲取一個StudentDTO,然后查詢學生檔案相關的ProfileDTO,組裝成ProfileBO,作為檔案領域模型;
  4. 業務層從service 層拿到這個BO,對BO做一個視圖轉化,轉成VO視圖對象,提供給前端負責展示。

VO(視圖) 和 DO(數據模型)都可能會隨著需求變化,軟件設計的原則是降低耦合,一桿到底這種設計就是強耦合(把視圖和數據直接綁定),DO變化的時候因為DTO(數據傳輸對象)、BO(領域模型)的存在,不需要修改VO,VO修改也同樣不需要修改DO數據模型

原文鏈接:https://blog.csdn.net/qq_46509116/article/details/135311546

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新