DAO:::::DAO實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作.
SERVICE::::::Service實(shí)現(xiàn)業(yè)務(wù)邏輯的封裝,數(shù)據(jù)庫操作只是業(yè)務(wù)邏輯的一部分而已。
但是在實(shí)際應(yīng)用中,建議使用Service+DAO,看似麻煩些,但分層能相對(duì)清晰一點(diǎn)。
總之,我還是很喜歡把DAO和SERVICE分開的。這樣起碼以后容易擴(kuò)展并且看起來邏輯清晰.
看過的一篇帖子說:比如現(xiàn)在用hibernate 以后可能改為jdbc或者其他的也比較方便,SERVICE是單純的進(jìn)行業(yè)務(wù)邏輯處理調(diào)用DAO來持久數(shù)據(jù),所以DAO和SERVICE還是應(yīng)該要獨(dú)立的!
http://www.javaeye.com/topic/11712
以下是我看到的一個(gè)帖子,總結(jié)的很好。做為收藏.....
第二種模型,也就是Martin Fowler指的rich domain object是下面這樣子的:
一個(gè)帶有業(yè)務(wù)邏輯的實(shí)體類,即domain object是Item
一個(gè)DAO接口ItemDao
一個(gè)DAO實(shí)現(xiàn)ItemDaoHibernateImpl
一個(gè)業(yè)務(wù)邏輯對(duì)象ItemManager
<script>render_code();</script>
競(jìng)標(biāo)這個(gè)業(yè)務(wù)邏輯被放入到Item中來。請(qǐng)注意this.getBids.add(newBid); 如果沒有Hibernate或者JDO這種O/R Mapping的支持,我們是無法實(shí)現(xiàn)這種透明的持久化行為的。但是請(qǐng)注意,Item里面不能去調(diào)用ItemDAO,對(duì)ItemDAO產(chǎn)生依賴!
ItemDao定義持久化操作的接口,用于隔離持久化代碼。
<script>render_code();</script>
在第二種模型中,placeBid業(yè)務(wù)邏輯是放在Item中實(shí)現(xiàn)的,而loadItemById和findAll業(yè)務(wù)邏輯是放在ItemManager中實(shí)現(xiàn)的。不過值得注意的是,即使placeBid業(yè)務(wù)邏輯放在Item中,你仍然需要在ItemManager中簡(jiǎn)單的封裝一層,以保證對(duì)placeBid業(yè)務(wù)邏輯進(jìn)行事務(wù)的管理和持久化的觸發(fā)。
這種模型是Martin Fowler所指的真正的domain model。在這種模型中,有三個(gè)業(yè)務(wù)邏輯方法:placeBid,loadItemById和findAll,現(xiàn)在的問題是哪個(gè)邏輯應(yīng)該放在Item中,哪個(gè)邏輯應(yīng)該放在ItemManager中。在我們這個(gè)例子中,placeBid放在Item中(但是ItemManager也需要對(duì)它進(jìn)行簡(jiǎn)單的封裝),loadItemById和findAll是放在ItemManager中的。
切分的原則是什么呢? Rod Johnson提出原則是“case by case”,可重用度高的,和domain object狀態(tài)密切關(guān)聯(lián)的放在Item中,可重用度低的,和domain object狀態(tài)沒有密切關(guān)聯(lián)的放在ItemManager中。
我提出的原則是:看業(yè)務(wù)方法是否顯式的依賴持久化。
Item的placeBid這個(gè)業(yè)務(wù)邏輯方法沒有顯式的對(duì)持久化ItemDao接口產(chǎn)生依賴,所以要放在Item中。請(qǐng)注意,如果脫離了Hibernate這個(gè)持久化框架,Item這個(gè)domain object是可以進(jìn)行單元測(cè)試的,他不依賴于Hibernate的持久化機(jī)制。它是一個(gè)獨(dú)立的,可移植的,完整的,自包含的域?qū)ο?/span>。
而loadItemById和findAll這兩個(gè)業(yè)務(wù)邏輯方法是必須顯式的對(duì)持久化ItemDao接口產(chǎn)生依賴,否則這個(gè)業(yè)務(wù)邏輯就無法完成。如果你要把這兩個(gè)方法放在Item中,那么Item就無法脫離Hibernate框架,無法在Hibernate框架之外獨(dú)立存在。
聯(lián)系客服