springmvc 中dao層和service層的區(qū)別說明
springmvc dao層和service層的區(qū)別
首先解釋面上意思,service是業(yè)務(wù)層,dao是數(shù)據(jù)訪問層
這個(gè)問題我曾經(jīng)也有過,記得以前剛學(xué)編程的時(shí)候,都是在service里直接調(diào)用dao,service里面就new一個(gè)dao類對(duì)象,調(diào)用,其他有意義的事沒做,也不明白有這個(gè)有什么用,參加工作久了以后就會(huì)知道,業(yè)務(wù)才是工作中的重中之重。
我們都知道,標(biāo)準(zhǔn)主流現(xiàn)在的編程方式都是采用MVC綜合設(shè)計(jì)模式,MVC本身不屬于設(shè)計(jì)模式的一種,它描述的是一種結(jié)構(gòu),最終目的達(dá)到解耦,解耦說的意思是你更改某一層代碼,不會(huì)影響我其他層代碼,如果你會(huì)像spring這樣的框架,你會(huì)了解面向接口編程,表示層調(diào)用控制層,控制層調(diào)用業(yè)務(wù)層,業(yè)務(wù)層調(diào)用數(shù)據(jù)訪問層。
初期也許都是new對(duì)象去調(diào)用下一層,比如你在業(yè)務(wù)層new一個(gè)DAO類的對(duì)象,調(diào)用DAO類方法訪問數(shù)據(jù)庫(kù),這樣寫是不對(duì)的,因?yàn)樵跇I(yè)務(wù)層中是不應(yīng)該含有具體對(duì)象,最多只能有引用,如果有具體對(duì)象存在,就耦合了。當(dāng)那個(gè)對(duì)象不存在,我還要修改業(yè)務(wù)的代碼,這不符合邏輯。
好比主板上內(nèi)存壞了,我換內(nèi)存,沒必要連主板一起換。我不用知道內(nèi)存是哪家生產(chǎn),不用知道多大容量,只要是內(nèi)存都可以插上這個(gè)接口使用。這就是MVC的意義。
接下來說你感覺service的意義,其實(shí)因?yàn)槟悻F(xiàn)在做東西分層次不是那么嚴(yán)格,在一個(gè)你們做東西業(yè)務(wù)本身也少,舉個(gè)最簡(jiǎn)單的例子,你做一個(gè)分頁(yè)的功能,數(shù)據(jù)1000條,你20條在一個(gè)頁(yè),你可以把這個(gè)功能寫成工具類封裝起來,然后在業(yè)務(wù)層里調(diào)用這個(gè)封裝的方法,這才是業(yè)務(wù)里真正干得事,只要沒訪問數(shù)據(jù)庫(kù)的,都要在業(yè)務(wù)里寫。
DAO層、Service層、Controller層和View層詳解
DAO層
DAO層主要是做數(shù)據(jù)持久層的工作,負(fù)責(zé)與數(shù)據(jù)庫(kù)進(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)類是哪個(gè)類,顯得結(jié)構(gòu)非常清晰,DAO層的數(shù)據(jù)源配置,以及有關(guān)數(shù)據(jù)庫(kù)連接的參數(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ù)利用性,程序顯得非常簡(jiǎn)潔。
Controller層
Controller層負(fù)責(zé)具體的業(yè)務(wù)模塊流程的控制,在此層里面要調(diào)用Serice層的接口來控制業(yè)務(wù)流程,控制的配置也同樣是在Spring的配置文件里面進(jìn)行,針對(duì)具體的業(yè)務(wù)流程,會(huì)有不同的控制器,我們具體的設(shè)計(jì)過程中可以將流程進(jìn)行抽象歸納,設(shè)計(jì)出可以重復(fù)利用的子單元流程模塊,這樣不僅使程序結(jié)構(gòu)變得清晰,也大大減少了代碼量。
View層
此層與控制層結(jié)合比較緊密,需要二者結(jié)合起來協(xié)同工發(fā)。View層主要負(fù)責(zé)前臺(tái)jsp頁(yè)面的表示
DAO層
Service層這兩個(gè)層次都可以單獨(dú)開發(fā),互相的耦合度很低,完全可以獨(dú)立進(jìn)行,這樣的一種模式在開發(fā)大項(xiàng)目的過程中尤其有優(yōu)勢(shì),Controller,View層因?yàn)轳詈隙缺容^高,因而要結(jié)合在一起開發(fā),但是也可以看作一個(gè)整體獨(dú)立于前兩個(gè)層進(jìn)行開發(fā)。這樣,在層與層之前我們只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應(yīng)用,一切顯得非常清晰簡(jiǎn)單。 DAO設(shè)計(jì)的總體規(guī)劃需要和設(shè)計(jì)的表,和實(shí)現(xiàn)類之間一一對(duì)應(yīng)。
DAO層所定義的接口里的方法都大同小異,這是由我們?cè)贒AO層對(duì)數(shù)據(jù)庫(kù)訪問的操作來決定的,對(duì)數(shù)據(jù)庫(kù)的操作,我們基本要用到的就是新增,更新,刪除,查詢等方法。因而DAO層里面基本上都應(yīng)該要涵蓋這些方法對(duì)應(yīng)的操作。除此之外,可以定義一些自定義的特殊的對(duì)數(shù)據(jù)庫(kù)訪問的方法。
Service邏輯層設(shè)計(jì)
Service層是建立在DAO層之上的,建立了DAO層后才可以建立Service層,而Service層又是在Controller層之下的,因而Service層應(yīng)該既調(diào)用DAO層的接口,又要提供接口給Controller層的類來進(jìn)行調(diào)用,它剛好處于一個(gè)中間層的位置。每個(gè)模型都有一個(gè)Service接口,每個(gè)接口分別封裝各自的業(yè)務(wù)處理方法。
在DAO層定義的一些方法,在Service層并沒有使用,那為什么還要在DAO層進(jìn)行定義呢?這是由我們定義的需求邏輯所決定的。
DAO層的操作 經(jīng)過抽象后基本上都是通用的,因而我們?cè)诙xDAO層的時(shí)候可以將相關(guān)的方法定義完畢,這樣的好處是在對(duì)Service進(jìn)行擴(kuò)展的時(shí)候不需要再對(duì)DAO層進(jìn)行修改,提高了程序的可擴(kuò)展性。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC學(xué)習(xí)之JSON和全局異常處理詳解
在項(xiàng)目上線之后,往往會(huì)出現(xiàn)一些不可預(yù)料的異常信息,對(duì)于邏輯性或設(shè)計(jì)性問題,開發(fā)人員或者維護(hù)人員需要通過日志,查看異常信息并排除異常,這篇文章主要給大家介紹了關(guān)于SpringMVC學(xué)習(xí)之JSON和全局異常處理的相關(guān)資料,需要的朋友可以參考下2022-10-10
java實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例
這篇文章主要介紹了java實(shí)現(xiàn)拉鉤網(wǎng)上的FizzBuzzWhizz問題示例,需要的朋友可以參考下2014-05-05
SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題
這篇文章主要介紹了SpringCloud zuul網(wǎng)關(guān)解決跨域問題的具體實(shí)現(xiàn)方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
IDEA無法創(chuàng)建JDK1.8版本的Springboot項(xiàng)目問題解決(2種方法)
本文主要介紹了IDEA無法創(chuàng)建JDK1.8版本的Springboot項(xiàng)目問題解決,包含兩種解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
SystemServer進(jìn)程啟動(dòng)過程解析
這篇文章主要為大家介紹了SystemServer進(jìn)程啟動(dòng)過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
IntelliJ IDEA創(chuàng)建maven web項(xiàng)目的圖文步驟(IDEA新手適用)
這篇文章主要介紹了IntelliJ IDEA創(chuàng)建maven web項(xiàng)目的圖文步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架
這篇文章主要介紹了詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03

