1,dao和service對應
一般情況下,Hibernate DAO只操作一個POJO對象,因此一個DAO對應一個POJO對象。 Service層是爲了處理包含多個POJO對象(即對多個表的數據操作)時,進行事務管理(聲明式事務管理)。Service層(其接口的實現類)被注入多個DAO對象,以完成其數據操作。
2, Service之有無
這一點我的看法未必正確,我的腦海現在有兩種構建業務層的模式:
模式1是Service + DAO,即DAO中只做CRUD及類似的簡單操作(稱之爲功能點,不包含業務邏輯),Service中通過調用一個或多個DAO中的功能點來組合成爲業務邏輯.Service的數量應該由功能模塊來決定。
在這種模型中業務邏輯是放在Service中的,事務的邊界也應該在Service中控制. 當然,直接在Service中控制事務會引入非業務邏輯的代碼,幸好Spring的AOP可以解決這個問題,這也是引入Spring的原因之一.
如果說到缺點,就在於對某些對象的操作就是簡單的CRUD,Service層顯得累贅. 模式2是Service + BO, 而BO = DAO + 業務方法, 在原先DAO的基礎上添加業務方法,形成BO對象。需要注意的是BO中的業務方法往往是針對一個實體對象的,如果需要跨越多個實體對象,則方法應該放在Service中。
舉例來說,一個簡單的銀行帳戶管理系統,創建帳戶這個BO對象,裏面可以有修改密碼,取錢等業務方法(不難看出,這些方法都只對單個帳戶對象進行操作)。現在需要添加一個轉賬方法,就應該放在Service中。
這裏Service和
BO的關係是什麼樣的呢?再舉一例:以國家行政機關爲例:糧食局負責收糧,賣種子等,建設部負責審批土地買賣,建設公路等,這都是行政部分份內的事兒。突
然某地發了水災,救災時需要糧食局開倉放糧,建設部修建臨時房屋,如何協調兩個部門?就需要成立專門的救災委員會,由救災委員會出面對兩個部分的資源進行
調撥。這裏兩個部分就是BO,而救災委員會就是Service。不知我的意思是否表達準確了,呵呵。 模式1的在劃分Service和DAO時界限清晰,但會帶來一些無必要的代碼。
模式2的劃分相對複雜,然而可以提高編碼效率。
當然小規模的應用中,沒有Service,完全是DAO或BO也是可以接受的。
3,Service和DAO的接口之有無
接口是一種契約,它可以有多種實現。所以接口之有無取決於具體實現是否需要多樣化。如果鐵定一種DAO或一種Service只有一種實現,那麼抽象出接口的意義不大。然而一些大型應用或許需要DAO和Service的多種實現(比如上面例子中的帳戶DAO,可能需要一種Hibernate實現、一種CMP實現和一種JDO實現),爲了向上一層隱藏具體實現類,需要採用接口。
隱藏具體實現類的創建過程,這有兩種方法:一是實用工廠方法,代價是代碼量大(每個DAO和Service一個工廠)。二是使用Spring的IoC,實現依賴注入,不需要寫額外的代碼,這也是引入Spring的理由之二。
DAO和Service層的一些解釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
Java Web(八) MVC和三層架構
wx5c540151c427f
2019-02-02 13:15:18
2018Java互聯網架構師視頻教程
一直努力跑
2019-01-14 12:55:58
使用 Docker 搭建 Java Web 運行環境
springboot12
2018-09-12 07:05:50
DAO和Service層的一些解釋
yunlvrensheng
2018-09-12 03:25:37
Js中的window.parent ,window.top,window.self詳解
itso310
2018-09-12 02:10:07
myeclipse無法識別系統內置類String等
itso310
2018-09-12 02:10:06
myeclipse中找不到數據庫驅動程序包
itso310
2018-09-12 02:10:06
[JS]手機端網頁開發問題及解決方法整理
icyore
2018-09-11 09:16:44
JAVA中使用JSON
icyore
2018-09-11 09:16:42
[CSS]手機端網頁開發問題及解決方法整理
icyore
2018-09-11 09:16:42
[共通]手機端網頁開發問題及解決方法整理
icyore
2018-09-11 09:16:42
【Junit】Web測試
icyore
2018-09-11 09:16:37
Java Web從入門到精通
www78963214
2018-09-11 08:53:45
jacob插件導出文字、表格、圖片到Word
jclpc
2018-09-11 08:09:06
POI導出圖片到EXCEL
jclpc
2018-09-11 08:09:05