springmvc 中dao層和service層的區(qū)別說明
springmvc dao層和service層的區(qū)別
首先解釋面上意思,service是業(yè)務(wù)層,dao是數(shù)據(jù)訪問層
這個問題我曾經(jīng)也有過,記得以前剛學(xué)編程的時候,都是在service里直接調(diào)用dao,service里面就new一個dao類對象,調(diào)用,其他有意義的事沒做,也不明白有這個有什么用,參加工作久了以后就會知道,業(yè)務(wù)才是工作中的重中之重。
我們都知道,標(biāo)準(zhǔn)主流現(xiàn)在的編程方式都是采用MVC綜合設(shè)計(jì)模式,MVC本身不屬于設(shè)計(jì)模式的一種,它描述的是一種結(jié)構(gòu),最終目的達(dá)到解耦,解耦說的意思是你更改某一層代碼,不會影響我其他層代碼,如果你會像spring這樣的框架,你會了解面向接口編程,表示層調(diào)用控制層,控制層調(diào)用業(yè)務(wù)層,業(yè)務(wù)層調(diào)用數(shù)據(jù)訪問層。
初期也許都是new對象去調(diào)用下一層,比如你在業(yè)務(wù)層new一個DAO類的對象,調(diào)用DAO類方法訪問數(shù)據(jù)庫,這樣寫是不對的,因?yàn)樵跇I(yè)務(wù)層中是不應(yīng)該含有具體對象,最多只能有引用,如果有具體對象存在,就耦合了。當(dāng)那個對象不存在,我還要修改業(yè)務(wù)的代碼,這不符合邏輯。
好比主板上內(nèi)存壞了,我換內(nèi)存,沒必要連主板一起換。我不用知道內(nèi)存是哪家生產(chǎn),不用知道多大容量,只要是內(nèi)存都可以插上這個接口使用。這就是MVC的意義。
接下來說你感覺service的意義,其實(shí)因?yàn)槟悻F(xiàn)在做東西分層次不是那么嚴(yán)格,在一個你們做東西業(yè)務(wù)本身也少,舉個最簡單的例子,你做一個分頁的功能,數(shù)據(jù)1000條,你20條在一個頁,你可以把這個功能寫成工具類封裝起來,然后在業(yè)務(wù)層里調(diào)用這個封裝的方法,這才是業(yè)務(wù)里真正干得事,只要沒訪問數(shù)據(jù)庫的,都要在業(yè)務(wù)里寫。
DAO層、Service層、Controller層和View層詳解
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)行配置。
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ù)利用性,程序顯得非常簡潔。
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)變得清晰,也大大減少了代碼量。
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ò)展性。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Maven配置文件修改及導(dǎo)入第三方j(luò)ar包的實(shí)現(xiàn)
本文主要介紹了Maven配置文件修改及導(dǎo)入第三方j(luò)ar包的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
Java多線程鎖機(jī)制相關(guān)原理實(shí)例解析
這篇文章主要介紹了Java多線程鎖機(jī)制相關(guān)原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08
SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯的示例代碼
這篇文章主要介紹了SpringBoot?模板模式實(shí)現(xiàn)優(yōu)惠券邏輯,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
Java代碼為例講解堆的性質(zhì)和基本操作以及排序方法
堆數(shù)據(jù)結(jié)構(gòu)可以看作一顆完全二叉樹,因而又被成為二叉堆,這里我們以Java代碼為例講解堆的性質(zhì)和基本操作以及排序方法,需要的朋友可以參考下2016-06-06
SpringBoot密碼加密的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot密碼加密的實(shí)現(xiàn)示例,包括引入依賴、配置加密工具、生成加密密鑰、加密密碼、配置解密,具有一定的參考價值,感興趣的可以了解一下2024-08-08
spring boot 常見http請求url參數(shù)獲取方法
這篇文章主要介紹了spring boot 常見http請求url參數(shù)獲取,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
基于SpringBoot實(shí)現(xiàn)圖片防盜鏈的兩種方式
出于安全和性能的考慮,我們希望服務(wù)器返回的圖片資源僅在指定網(wǎng)站內(nèi)展示,防止爬蟲或其它站點(diǎn)直接引用圖片地址進(jìn)行下載或展示,進(jìn)而消耗服務(wù)器資源,所以本文給大家介紹了基于SpringBoot實(shí)現(xiàn)圖片防盜鏈的兩種方式,需要的朋友可以參考下2025-02-02

