分層 DAO層,Service層吝秕,Controller層泊脐、View層

轉(zhuǎn)自:http://www.cnblogs.com/zx3707/p/5708486.html

1. DAO層:DAO層主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫進(jìn)行聯(lián)絡(luò)的一些任務(wù)都封裝在此郭膛,DAO層的設(shè)計(jì)首先是設(shè)計(jì)DAO的接口晨抡,然后在Spring的配置文件中定義此接口的實(shí)現(xiàn)類,然后就可在模塊中調(diào)用此接口來進(jìn)行數(shù)據(jù)業(yè)務(wù)的處理则剃,而不用關(guān)心此接口的具體實(shí)現(xiàn)類是哪個類耘柱,顯得結(jié)構(gòu)非常清晰,DAO層的數(shù)據(jù)源配置棍现,以及有關(guān)數(shù)據(jù)庫連接的參數(shù)都在Spring的配置文件中進(jìn)行配置调煎。

2. Service層:Service層主要負(fù)責(zé)業(yè)務(wù)模塊的邏輯應(yīng)用設(shè)計(jì)。同樣是首先設(shè)計(jì)接口己肮,再設(shè)計(jì)其實(shí)現(xiàn)的類士袄,接著再Spring的配置文件中配置其實(shí)現(xiàn)的關(guān)聯(lián)。這樣我們就可以在應(yīng)用中調(diào)用Service接口來進(jìn)行業(yè)務(wù)處理谎僻。Service層的業(yè)務(wù)實(shí)現(xiàn)娄柳,具體要調(diào)用到已定義的DAO層的接口,封裝Service層的業(yè)務(wù)邏輯有利于通用的業(yè)務(wù)邏輯的獨(dú)立性和重復(fù)利用性艘绍,程序顯得非常簡潔赤拒。

3. Controller層:Controller層負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制,在此層里面要調(diào)用Serice層的接口來控制業(yè)務(wù)流程,控制的配置也同樣是在Spring的配置文件里面進(jìn)行挎挖,針對具體的業(yè)務(wù)流程这敬,會有不同的控制器,我們具體的設(shè)計(jì)過程中可以將流程進(jìn)行抽象歸納蕉朵,設(shè)計(jì)出可以重復(fù)利用的子單元流程模塊崔涂,這樣不僅使程序結(jié)構(gòu)變得清晰,也大大減少了代碼量始衅。

4. View層?此層與控制層結(jié)合比較緊密冷蚂,需要二者結(jié)合起來協(xié)同工發(fā)。View層主要負(fù)責(zé)前臺jsp頁面的表示觅闽,

DAO層帝雇,Service層這兩個層次都可以單獨(dú)開發(fā),互相的耦合度很低蛉拙,完全可以獨(dú)立進(jìn)行尸闸,這樣的一種模式在開發(fā)大項(xiàng)目的過程中尤其有優(yōu)勢,Controller孕锄,View層因?yàn)轳詈隙缺容^高吮廉,因而要結(jié)合在一起開發(fā),但是也可以看作一個整體獨(dú)立于前兩個層進(jìn)行開發(fā)畸肆。這樣宦芦,在層與層之前我們只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應(yīng)用轴脐,一切顯得非常清晰簡單调卑。

DAO設(shè)計(jì)的總體規(guī)劃需要和設(shè)計(jì)的表,和實(shí)現(xiàn)類之間一一對應(yīng)大咱。

DAO層所定義的接口里的方法都大同小異恬涧,這是由我們在DAO層對數(shù)據(jù)庫訪問的操作來決定的,對數(shù)據(jù)庫的操作碴巾,我們基本要用到的就是新增溯捆,更新,刪除厦瓢,查詢等方法提揍。因而DAO層里面基本上都應(yīng)該要涵蓋這些方法對應(yīng)的操作。除此之外煮仇,可以定義一些自定義的特殊的對數(shù)據(jù)庫訪問的方法劳跃。

Service邏輯層設(shè)計(jì)

Service層是建立在DAO層之上的,建立了DAO層后才可以建立Service層浙垫,而Service層又是在Controller層之下的售碳,因而Service層應(yīng)該既調(diào)用DAO層的接口,又要提供接口給Controller層的類來進(jìn)行調(diào)用,它剛好處于一個中間層的位置贸人。每個模型都有一個Service接口,每個接口分別封裝各自的業(yè)務(wù)處理方法佃声。

在DAO層定義的一些方法艺智,在Service層并沒有使用,那為什么還要在DAO層進(jìn)行定義呢圾亏?這是由我們定義的需求邏輯所決定的十拣。DAO層的操作?經(jīng)過抽象后基本上都是通用的,因而我們在定義DAO層的時候可以將相關(guān)的方法定義完畢志鹃,這樣的好處是在對Service進(jìn)行擴(kuò)展的時候不需要再對DAO層進(jìn)行修改夭问,提高了程序的可擴(kuò)展性。

在DAO層定義的一些方法曹铃,在Service層并沒有使用缰趋,那為什么還要在DAO層進(jìn)行定義呢?這是由我們定義的需求邏輯所決定的陕见。DAO層的操作 經(jīng)過抽象后基本上都是通用的秘血,因而我們在定義DAO層的時候可以將相關(guān)的方法定義完畢,這樣的好處是在對Service進(jìn)行擴(kuò)展的時候不需要再對DAO層進(jìn)行修改评甜,提高了程序的可擴(kuò)展性灰粮。

DAO完成連接數(shù)據(jù)庫修改刪除添加等的實(shí)現(xiàn)細(xì)節(jié),例如sql語句是怎么寫的忍坷,怎么把對象放入數(shù)據(jù)庫的粘舟。service層是面向功能的,一個個功能模塊比如說銀行登記并完成一次存款佩研,UI要把請求給service層柑肴,然后service曾將這一個case分解成許多步驟調(diào)用底層的實(shí)現(xiàn)完成這次存款,dao就是下面那層韧骗。

dao就是把數(shù)據(jù)存起來嘉抒,之所以service的方法會有雷同只不過是因?yàn)閟ervice得需求不是很復(fù)雜不用再service里面完成太多包裝或者處理過程可以直接調(diào)用dao的方法就完成的請求處理例如就要save一個對象,而這個對象是封裝好的袍暴,dao里面有個方法專門save封裝好的對象于是service的方法就僅僅調(diào)用一下就o了些侍,函數(shù)簽名自然很像了service不能直接接觸持久層,而dao是持久層或者直接訪問持久層有的時候只是為了分層清楚,為了將來scale?up的時候方便我們才把service和dao分開辑莫,其實(shí)沒必要分開的菩鲜。

---------------------------------------------------------------

根據(jù)不同項(xiàng)目的復(fù)雜度來確定是否需要分層,如果是小項(xiàng)目的話,2層應(yīng)該就夠了,分層是為了很好的解耦,和程序的可觀性,還有就是很好的項(xiàng)目分工,如果遇到某個客戶需要修改某個查詢結(jié)果集合,你需要修改的首先是dao的SQL,接著是service的相應(yīng)調(diào)用方法來為VIEW服務(wù),??如果是分層清楚的話,只需要在DAO中加一個方法,在SERVICE中改變起調(diào)用的方法接口,需要改動的不大,

-----------------------------------------------------------------

在用ssh進(jìn)行開發(fā)中,一般情況下都是分為三層:web層spring層dao層耗式,基本的流程是首先定義一個dao接口,然后去實(shí)現(xiàn)這個接口,在定義同類型的service接口(service接口與dao接口是完全一樣)刊咳,再實(shí)現(xiàn)service接口彪见,(這是是用dao接口去注入),然后web層在去調(diào)用service層娱挨。

DAO層的職責(zé)是純粹的數(shù)據(jù)操作余指,如果是hibernate,那就只需要類似getHibernateTemplate().save,?update,?delete,?findyBy*這類的方法而service層是負(fù)責(zé)寫業(yè)務(wù)邏輯的跷坝,純粹的業(yè)務(wù)邏輯酵镜,其中的數(shù)據(jù)操作是通過注入的DAO實(shí)現(xiàn)的,但是業(yè)務(wù)是在這層柴钻。?如果你的service層與dao層代碼嚴(yán)重重復(fù)淮韭,這說明你的業(yè)務(wù)比較簡單。復(fù)雜業(yè)務(wù)這個結(jié)構(gòu)的優(yōu)勢就很明顯了贴届。service層的作用是對dao取得的數(shù)據(jù)做操作更貼近于業(yè)務(wù)的實(shí)現(xiàn)?dao只是數(shù)據(jù)的增刪改查靠粪,對小型的應(yīng)用來說,SSH?確實(shí)提高了開發(fā)成本和開發(fā)周期粱腻,但是卻有利于擴(kuò)展和維護(hù)庇配。

利用spring?的ioc?解偶使業(yè)務(wù)邏輯與持久層松偶合。

-----------------------------------------------------------------

分層并不一定是絕對的绍些,具體的還是要根據(jù)項(xiàng)目實(shí)際情況來定捞慌,不是么?如果是理想狀態(tài)的話柬批,恐怕在你的service層上面還要再多加一層的啸澡。但是你覺得有必要嗎?

實(shí)際上氮帐,對于小項(xiàng)目來說嗅虏,直接通過dao來進(jìn)行操作也不是不可以,搞得太復(fù)雜上沐,也沒有必要皮服。這是我的個人感覺。就好像po和dto一樣参咙,有的人直接就將po傳到web層龄广,有的還要加一個轉(zhuǎn)換,由dto進(jìn)行數(shù)據(jù)傳遞蕴侧。顯然后者實(shí)現(xiàn)更理想择同,但是你不覺得這樣很麻煩嗎。?微軟的净宵。net號稱有11層(還是多少層來著敲才,反正層很多)裹纳,但是實(shí)際能分出多少層,還是根據(jù)開發(fā)者自己情況來定了紧武。要注意代碼是死的剃氧,人是活的,不要死套框架阻星,否則自己很可能也會陷入開發(fā)誤區(qū)她我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市迫横,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酝碳,老刑警劉巖矾踱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疏哗,居然都是意外死亡呛讲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門返奉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贝搁,“玉大人,你說我怎么就攤上這事芽偏±啄妫” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵污尉,是天一觀的道長膀哲。 經(jīng)常有香客問我,道長被碗,這世上最難降的妖魔是什么某宪? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮锐朴,結(jié)果婚禮上兴喂,老公的妹妹穿的比我還像新娘。我一直安慰自己焚志,他們只是感情好衣迷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娩嚼,像睡著了一般蘑险。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岳悟,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天佃迄,我揣著相機(jī)與錄音泼差,去河邊找鬼。 笑死呵俏,一個胖子當(dāng)著我的面吹牛堆缘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播普碎,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼吼肥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了麻车?” 一聲冷哼從身側(cè)響起缀皱,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎动猬,沒想到半個月后啤斗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赁咙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年钮莲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彼水。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔拥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凤覆,到底是詐尸還是另有隱情链瓦,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布叛赚,位于F島的核電站澡绩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俺附。R本人自食惡果不足惜肥卡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望事镣。 院中可真熱鬧步鉴,春花似錦、人聲如沸璃哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽随闪。三九已至阳似,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐伴,已是汗流浹背撮奏。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工俏讹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畜吊。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓泽疆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玲献。 傳聞我的和親對象是個殘疾皇子殉疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法捌年,內(nèi)部類的語法瓢娜,繼承相關(guān)的語法,異常的語法礼预,線程的語...
    子非魚_t_閱讀 31,587評論 18 399
  • 摘錄自:http://www.cnblogs.com/zx3707/p/5708486.html DAO層:DAO...
    不會積閱讀 4,625評論 0 1
  • Java分層概念(轉(zhuǎn)) 原文地址(也不屬于原文吧恋腕,這也是別人轉(zhuǎn)載的不知道原作者是誰,如有侵權(quán)逆瑞,請聯(lián)系,以刪除):h...
    小小世界R閱讀 1,628評論 0 0
  • 文學(xué)的作用伙单,最重要的是引起心靈的共鳴获高,這不是一本嘩眾取寵的讀物。記錄下個體生命的履痕吻育,從某種意義上比記錄重大事件更...
    瀟逍閱讀 736評論 6 8