PO/BO/VO/DTO/POJO/DAO/DO
文章目錄
- DO(Domain Object)
- DO(Data Object)
- PO
- VO
- BO
- DTO
- POJO
- DAO
- JavaBean
- EJB
- Entity
- 應用程序的分層設計
- MVC
- 業務分層
- 阿里開發手冊關于POJO類的命名規范
- 總結
- 參考文章
DO(Domain Object)
Domain Object,域對象。就是從現實世界中抽象出來的有形或無形的業務實體。
比如一個商城的項目,商城主要的模塊就是用戶、訂單,商品三大模塊,那么這三塊數據就可以叫作三個域;再比如一個招聘網站的項目,用戶、簡歷、崗位三大模塊,這三塊數據就可以叫作三個域。
那么招聘網站的簡歷是怎么存到數據庫的呢,不可能用一張表就能存的,因為簡歷包含基本信息和工作經驗,項目經驗,學習經驗等。基本信息可以存在簡歷表,但是涉及到多條的就不行,因為沒人知道有多少條工作經驗,項目經驗,所以必須要單獨建工作經驗表和項目經驗表關聯到簡歷基本信息表。但是前端頁面是不關心這些的,前端需要的數據就是一個簡歷所有的信息,這時就可以用 DO 來處理,DO 對象就是一個簡歷對象,包含了簡歷基本信息以及工作經驗,項目經驗等。這樣前端只需要獲取一個對象就行了,不需要獲取基本信息的同時,還要從基本信息里面獲取簡歷編號,再拿著簡歷編號去獲取相關的工作經驗、項目經驗等信息。
DO 其實是 VO 的一種,是一種更為復雜的 VO。
DO 和 BO 在作用上相同。
DO(Data Object)
DO( Data Object):與數據庫表結構一一對應。
這個 DO 和 PO 作用相同。
PO
Persistent Object,持久對象。POJO 在持久層的體現,對 POJO 持久化后就成了 PO。PO 其實就是 Object Relation Mapping 框架中的實體類(Entity),PO 每個屬性基本上都對應數據表里面的某個字段。
一般 PO 類與數據表對應,一個 PO 對象對應數據表的一條記錄。
PO 通常是指 Entity Bean 對象。
VO
Value Object/View Object,值對象/視圖對象。VO 和 PO 一樣也是僅僅包含數據而已。通常是抽象出的業務對象,可以和數據庫表對應,也可以不對應,這根據業務的需要。
VO 一般對應于頁面上需要顯示的數據(表單)。用于界面顯示的數據對象,一個 VO 對象封裝整個界面展示所需要的數據。
DO 其實是 VO 的一種。
POJO 在表現層的體現。 當我們處理完數據時,需要展現時,這時傳遞到表現層的POJO就成了VO。它就是為了展現數據時用的。
BO
Business Object,業務對象。BO 是 POJO 在業務層的體現,對于業務操作來說,更多的是從業務上來包裝對象,通過調用 DAO 方法,結合 PO 進行業務操作
BO 和 Domain Object 的作用類似。
如一個 User 的 BO,可能包括name, age, sex, privilege, group等,這些屬性在數據庫中可能會在多張表中,因為每一張表對應一個PO,而我們的BO需要這些PO組合起來(或說重新拼裝)才能成為業務上的一個完整對象。
舉例說明:
比如一份簡歷,有教育經歷、工作經歷、社會關系等。
我們可以創建一個對應教育經歷的 PO 對象,創建一個對應工作經歷的 PO 對象,創建一個對應工作經歷的 PO 對象,再創建一個對應整份簡歷的 BO 對象,再將上述的 PO 對象全部封裝到 BO 對象中。
業務對象。 由Service層輸出的封裝業務邏輯的對象。
誰將多個 PO 封裝成 一個 BO 對象?
BO 對象只能用于裝載數據,不具有業務邏輯處理的能力?
DTO
Data Transfer Object,數據傳輸對象。是一種設計模式之間傳輸數據的軟件應用系統。數據傳輸目標往往是數據訪問對象從數據庫中檢索數據。
數據傳輸對象,Service或Manager向外傳輸的對象。
數據傳輸對象這個概念來源于 J2EE 的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用于展示層與服務層之間的數據傳輸對象。
簡單來說,當我們需要一個 PO 對象中的 10 個字段的數據,但這個對象總共有 20 個字段,我們不需要把整個 PO 對象全部字段傳輸到客戶端,就可以用 DTO 重新封裝,傳遞到客戶端。如果這個 DTO 對象對應于某個界面的展現數據,就叫 VO。
當我們需要在兩個系統間傳遞數據時,一種方式就是將 POJO 序列化后傳遞,這個傳遞狀態的 POJO 就是DTO。
POJO
Plain Ordinary Java Object,簡單的 Java 對象,實際就是普通 JavaBeans,是為了避免和 EJB 混淆所創造的簡稱。
POJO 類含有屬性及屬性對應 getter、setter 方法,沒有業務邏輯,有時可以作為 VO(Value Object)或DTO(Data Transfer Object)來使用。不允許有業務方法,也不能攜帶 Connection 之類的方法。
一個 POJO 持久化以后就是 PO;用它傳遞數據就是 DTO;直接用來對應顯示層的數據就是 VO。
BO、VO、DTO、DO、PO 統稱為 POJO,都是簡單的 JavaBean。
DAO
Data Access Object,數據訪問對象。DAO 是一個數據訪問接口。它可以把 POJO 持久化為 PO,使用 PO 組裝成 VO、DTO。
一個典型的 DAO 實現有下列幾個組件:
1.一個DAO工廠類;
2.一個DAO接口;
3.一個實現 DAO 接口的具體類;
4.數據傳遞對象(有些時候叫做值對象)。
具體的 DAO 類包含了從特定的數據源訪問數據的邏輯,一般一個 DAO 類對應一張數據表,每個操作要和事務關聯。
JavaBean
JavaBean 是一種 Java 語言寫成的可重用組件。對 JavaBean 并沒有嚴格的規范,理論上講,任何一個 Java 類都可以是一個 Bean。但通常情況下,由于 JavaBean 是被容器創建的,類必須是具體和公共的,并且具有無參數的構造器。
JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成屬性。JavaBean 主要指的是一種規范,即包含一組 set 和 get 方法的類。
和 Entity Bean 的區別是,JavaBean 可以包含業務邏輯代碼,并且不一定與數據表對應。
另外,通常 JavaBean 還要實現 Serializable 接口用于實現 Bean 的持久性。
EJB
Enterprise JavaBean(EJB)。EJB 是 JavaEE 的一部分,定義了一個用于開發基于組件的企業多重應用程序的標準。是 Java 的核心代碼,分別是回話 Bean(Session Bean)、實體 Bean(Entity Bean)、和消息驅動Bean(MessageDriven Bean)
EJB 我認為它是一組“功能” JavaBean 的集合。上面說了JavaBean 是實現了一種規范的 Java 對象。這里說EJB 是一組 JavaBean,意思是這一組 JavaBean 組合起來實現了某個組件的業務邏輯。這里的一組 JavaBean不是亂組合的,它們要滿足能實現某項業務功能的搭配。打個比方,對于一身穿著來說,包括一頂帽子,一件衣服,一條褲子,兩只鞋,這穿著就是 EJB。
Entity
實體 bean,一般是用于 ORM(對象關系映射)中,一個實體類映射成一張表,實體類中的屬性對應數據表的字段,一般無業務邏輯代碼。
負責將數據庫中的表記錄映射為內存中的 Entity 對象,事實上,創建一個 Entity Bean 對象相當于創建一條記錄,刪除一個 Entity Bean 對象會同時從數據庫中刪除對應記錄,修改一個Entity Bean 對象時,容器會自動將 Entity Bean 的狀態和數據庫同步。
Entity Bean 對象可以手動創建。
應用程序的分層設計
MVC
下圖中的 VIEW、ACTION 就屬于 View 層,SERVICE 就是 Controller 層,DAO、ORM 就是 Model 層。
業務分層
上圖所示的業務結構,可以分為視圖層(VIEW+ACTION),服務層(SERVICE),持久層(DAO)
阿里開發手冊關于POJO類的命名規范
1.數據對象:xxxDO,xxx即為數據表名;
2.數據傳輸對象:xxxDTO,xxx為業務領域相關的名稱;
3.展示對象:xxxVO,xxx一般為網頁的名稱;
4.POJO 是DO/DTO/BO/VO的統稱,禁止命名成xxxPOJO。
總結
數據訪問層(DAO):
DAO 將多個 PO 對象封裝成 BO 對象返回給 Service
業務邏輯層(Service):
從 BO 對象中抽取所需的數據封裝成 DTO 對象返回給 Controller
業務控制層(Controller):
將 DTO 對象直接返回給 View
數據展示層(View):
獲取和解釋 DTO 對象中的數據,封裝成 VO 對象返回給客戶端或者模板渲染引擎層
另外一種設計,業務邏輯層中的組件抽取和解釋 BO 對象中的數據,封裝成 VO 對象返回給控制層的組件,再由控制層將 VO 對象返回給客戶端或者模板渲染引擎層。如果對外提供接口訪問,則業務邏輯層可以從 BO 對象抽取所需的數據,封裝成 DTO 對象返回給調用者。
Busniess Object 和 Domain Objec 相同。
Data Object 和 Persistence Object 相同。
按 MVC 分層
Model:DAO DTO VO PO BO、Service、Manager
Controller:Action
View:模板渲染引擎組件
參考文章
https://www.cnblogs.com/Yale-L/p/11776788.html
https://www.cnblogs.com/lideqiang0909/p/11141007.html
https://www.zhihu.com/question/39651928
http://www.blogjava.net/vip01/archive/2013/05/25/92430.html
https://www.pianshen.com/article/2791497167/
https://blog.csdn.net/lairikeqi/article/details/106081782
https://www.zhihu.com/question/39651928
https://zhuanlan.zhihu.com/p/350964880
https://blog.csdn.net/weixin_39767124/article/details/111784425
https://zhuanlan.zhihu.com/p/102389552
總結
以上是生活随笔為你收集整理的PO/BO/VO/DTO/POJO/DAO/DO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拳皇13电脑按键设置(拳皇13电脑按键设
- 下一篇: 前端校验表单项内容是否合规的JS脚本代码