1. 程式人生 > >java中dao層和service層的區別,為什麼要用service?

java中dao層和service層的區別,為什麼要用service?

讀了下面的文章 讓我豁然開朗

轉文:
首先解釋面上意思,service是業務層,dao是資料訪問層。
呵呵,這個問題我曾經也有過,記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒做,也不明白有這個有什麼用,參加工作久了以後就會知道,業務才是工作中的重中之重。
我們都知道,**標準主流現在的程式設計方式都是採用MVC綜合設計模式,MVC本身不屬於設計模式的一種,它描述的是一種結構,最終目的達到解耦,解耦說的意思是你更改某一層程式碼,不會影響我其他層程式碼,如果你會像spring這樣的框架,你會了解面向介面程式設計,**表示層呼叫控制層,控制層呼叫業務層,業務層呼叫資料訪問層。
初期也許都是new物件去呼叫下一層,比如你在業務層new一個DAO類的物件,呼叫DAO類方法訪問資料庫,這樣寫是不對的,因為在業務層中是不應該含有具體物件,最多隻能有引用,如果有具體物件存在,就耦合了。


當那個物件不存在,我還要修改業務的程式碼,這不符合邏輯。好比主機板上記憶體壞了,我換記憶體,沒必要連主機板一起換。我不用知道記憶體是哪家生產,不用知道多大容量,只要是記憶體都可以插上這個介面使用。這就是MVC的意義。
接下來說你感覺service的意義,其實因為你現在做東西分層次不是那麼嚴格,在一個你們做東西業務本身也少,舉個最簡單的例子,你做一個分頁的功能,資料1000條,你20條在一個頁,你可以把這個功能寫成工具類封裝起來,然後在業務層裡呼叫這個封裝的方法,這才是業務裡真正幹得事,只要沒訪問資料庫的,都要在業務裡寫。
再有不明白的追問,這是經驗問題,呵呵,其實以後你就會懂。只是剛開始寫的程式碼都是有個請求,我就去資料庫取,業務幾乎沒有。

比說你現在用的是SSH框架,做一個使用者模組:
1、假設現在你做這個功能會用到user表和許可權表,那麼你前臺的頁面訪問action,action再去呼叫使用者模組service,使用者模組service判斷你是操作user表還是許可權表,如果你操作的是user表則service的實現類就去呼叫userDAO。如果是操作的是許可權表則呼叫許可權的DAO
2、也就是說DAO一定是和資料庫的每張表一一對應,而service則不是。明白的沒?其實你一個專案一個service和一個DAO其實也一樣可以操作資料庫,只不過那要是表非常多,出問題了,那找起來多麻煩,而且太亂了
3、好處就是你的整個專案非常系統化,和資料庫的表能一致,而且功能模組化,這樣以後維護或者改錯比較容易,效能也高一些