1. 程式人生 > >mvc dao層、service層 到底怎麼寫?

mvc dao層、service層 到底怎麼寫?

首先解釋面上意思,service是業務層,dao是資料訪問層。
呵呵,這個問題我曾經也有過,記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒做,也不明白有這個有什麼用,參加工作久了以後就會知道,業務才是工作中的重中之重。
我們都知道,標準主流現在的程式設計方式都是採用MVC綜合設計模式,MVC本身不屬於設計模式的一種,它描述的是一種結構,最終目的達到解耦,解耦說的意思是你更改某一層程式碼,不會影響我其他層程式碼,如果你會像spring這樣的框架,你會了解面向介面程式設計,表示層呼叫控制層,控制層呼叫業務層,業務層呼叫資料訪問層。初期也許都是new物件去呼叫下一層,比如你在業務層new一個DAO類的物件,呼叫DAO類方法訪問資料庫,這樣寫是不對的,因為在業務層中是不應該含有具體物件,最多隻能有引用,如果有具體物件存在,就耦合了。當那個物件不存在,我還要修改業務的程式碼,這不符合邏輯。好比主機板上記憶體壞了,我換記憶體,沒必要連主機板一起換。我不用知道記憶體是哪家生產,不用知道多大容量,只要是記憶體都可以插上這個介面使用。這就是MVC的意義。
接下來說你感覺service的意義,其實因為你現在做東西分層次不是那麼嚴格,在一個你們做東西業務本身也少,舉個最簡單的例子,你做一個分頁的功能,資料1000條,你20條在一個頁,你可以把這個功能寫成工具類封裝起來,然後在業務層裡呼叫這個封裝的方法,這才是業務裡真正幹得事,只要沒訪問資料庫的,都要在業務裡寫。 
再有不明白的追問,這是經驗問題,呵呵,其實以後你就會懂。只是剛開始寫的程式碼都是有個請求,我就去資料庫取,業務幾乎沒有。
 ------------------------------------------------------------------------------ 
雖然每分,但還是把自己的理解給LZ說說。
怎麼說呢,我不是理論帝。所以我講講自己的理解
比說你現在用的是SSH框架,做一個使用者模組:
1、假設現在你做這個功能會用到user表和許可權表,那麼你前臺的頁面訪問action,action再去呼叫使用者模組service,使用者模組service判斷你是操作user表還是許可權表,如果你操作的是user表則service的實現類就去呼叫userDAO。如果是操作的是許可權表則呼叫許可權的DAO
2、也就是說DAO一定是和資料庫的每張表一一對應,而service則不是。明白的沒?其實你一個專案一個service和一個DAO其實也一樣可以操作資料庫,只不過那要是表非常多,出問題了,那找起來多麻煩,而且太亂了
3、好處就是你的整個專案非常系統化,和資料庫的表能一致,而且功能模組化,這樣以後維護或者改錯比較容易,效能也高一些 
-------------------------------------------------------------------------- 
簡單的說DAO層是跟資料庫打交道的,service層是處理一些業務流程的,

至於你說的為什麼要用service層封裝,我認為:一般來說,某一個程式的有些業務流程需要連線資料庫,有些不需要與資料庫打交道而直接是一些業務處理,這樣就需要我們整合起來到service中去,這樣可以起到一個更好的開發與維護的作用,同時也是MVC設計模式中model層功能的體現
 ------------------------------------------------------------------------------- 
初級DAO模式:
例如::寫一個類 操作1張表 針對這張表的所有操作都以方法的形式寫在這個類中 1個操作對應1個方法要求是外部通過呼叫這個類的方法達到操作某張表的目的時不需要寫任何和資料庫以及JDBC相關的程式碼,這個類的命名就是XXDAO
比如表叫做 t_goods 商品表那麼操作它的DAO就叫GoodsDAO

高階DAO模式:
例如:即DAO工廠模式,多個XXDAO實現同一個介面或者繼承同一個基類,編寫一個工廠類通過工廠模式(簡單工廠模式或利用反射動態載入均可)獲得介面或基類物件,內部實際上封裝返回的是具體的XXDAO類的物件。簡單的說即是在1的基礎上將建立具體的XXDAO物件的方式由new變為工廠模式實現
例如:UserDAO dao = DAOFactory.create(...);
dao.save() 
dao.delete....
 ------------------------------------------------------------------------- 
1.有一個dao介面,裡面有平時的增刪查該的方法
2.有一個具體的實體類
3.有一個dao的實現類,有對實體操作的方法,繼承1的介面
4.如果有需要,還可以有一個工廠類,負責生產dao實現類
 ---------------------------------------------------------------------------
 DAO層一般有介面和該介面的實現類! 介面用於規範實現類! 實現類一般用於用於操作資料庫! 一般操作修改,新增,刪除資料庫操作的步驟很相似,就寫了一個公共類DAO類 ,修改,新增,刪除資料庫操作時 直接呼叫公共類DAO類!
 ----------------------------------------------------------------------------- 
com.公司名.系統名.模組名 
程式碼目錄結構
Action : 負責頁面邏輯,將呼叫service的結果返回到頁面中
Service : 介面定義
---impl 介面的實現,負責業務邏輯
Domain 對應資料庫表的pojo
Dao : 只負責連線資料庫,從資料庫中查詢結果,包裝成物件後返回
util :工具類
追問
我看著 他們的 DAO裡面的介面都和service裡面的介面都一模一樣 這是為什麼呢
何必多此一舉 還有再問下 spring 在呼叫的時候經過哪幾個步驟
回答
完全一樣是因為業務簡單,都是簡單的增刪改查。但是如果業務複雜一點,service層乾的活就多了。舉個簡單一點的例子,附件上傳,dao可能只把附件的路徑啊,名稱啊之類的儲存到資料庫中,但是真正的把檔案上傳的ftp還是要在service層寫的。

你的第二個問題沒看懂你要問啥。
------------------------------------------------------------------------------------------
action裡是動作層,一般是控制層的程式碼,控制頁面的跳轉;Dao層負責資料庫的物件的増刪改查介面,裡面的方法是抽象的;DAOImpl層則實現了Dao層中的抽象方法,供action呼叫,這樣也從一定程度上對控制層和資料庫層進行解耦
追問
dao daoImple 和 service serviceImpl 裡面的介面和實現有什麼不一樣嗎
分這麼多層幹嘛呢 是 daoImpl 供action 呼叫還是 serviceimpl供action 呼叫?
--------------------------------------------------------------------------------------------

相關推薦

mvc daoservice 到底怎麼

首先解釋面上意思,service是業務層,dao是資料訪問層。 呵呵,這個問題我曾經也有過,記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒做,也不明白有這個有什麼用,參加工作久了以後就會知

MVCdaoservice和controller

dao層主要做資料持久層的工作,負責與資料庫進行聯絡的一些任務都封裝在此,dao層的設計首先是設計dao層的介面,然後在Spring的配置檔案中定義此介面的實現類,然後就可以再模組中呼叫此介面來進行資料業務的處理,而不用關心此介面的具體實現類是哪個類,顯得結構非常清晰,dao層的資料來源配置,以及有關資料庫連

java中ActionServiceDao的功能區分

封裝 滿足 ont 事務管理 簡單 聲明式 所在 框架搭建 調用接口 Action/Service/DAO簡介:Action是管理業務(Service)調度和管理跳轉的。Service是管理具體的功能的。Action只負責管理,而Service負責實施。DAO只完成增刪改查

ActionServiceDao的功能區分

Action/Service/DAO簡介: Action是管理業務(Service)排程和管理跳轉的。 Service是管理具體的功能的。 Action只負責管理,而Service負責實施。 DAO只完成增刪改查,雖然可以1-n,n-n,1-1關聯,模糊、動態、子查詢都可以。但是無論多麼複雜的查詢,dao只是

DAOENTITYSERVICECONTROLLER個人的理解分析

DAO層、ENTITY層、SERVICE層、CONTROLLER層 1、DAO層: 持久層  主要與資料庫進行互動    DAO層主要是做資料持久層的工作,主要與資料庫進行互動。DAO層首先會建立DAO介面,然後會在配置檔案中定義該介面的實現類,    接著就可以在模組中就

spring+mybatis通用daoservice的一些個人理解與實現

1、現在的絕大多數web應用,通常都以action、service、dao三層去組織程式碼,這樣劃分結構很清晰,分工明確 2、一般情況下,我們會把事務控制在service層。 3、action和dao層,會使用一些框架技術。比如action層可能選擇有springmvc、struts等,dao層有hibe

DAOService,ControllerView詳解

1、Dao層 Dao層主要是做資料持久層的工作,負責與資料庫進行聯絡的一些任務都封裝在此,Dao層的設計首先是設計Dao的介面,然後在Spring的配置檔案中定義此介面的實現類,然後就可在模組中呼叫此介面來進行資料業務的處理,而不用關心此介面的具體實現類是哪個類,顯得結構非常清晰,Dao層的資料

DAOService,ControllerView

DAO層:DAO層主要是做資料持久層的工作,負責與資料庫進行聯絡的一些任務都封裝在此,DAO層的設計首先是設計DAO的介面,然後在Spring的配置檔案中定義此介面的實現類,然後就可在模組中呼叫此介面來進行資料業務的處理,而不用關心此介面的具體實現類是哪個類,顯得結構非常清晰,DAO層的資料來源配置,以及有關

Dao結合Service處理異常

1. 介面存在異常不利於解耦。 2. 將編譯時異常轉化為執行時異常或其子類,通知上層,上層可以根據自身能力選擇處理或向上丟擲。 舉例: 將UserDao中的SQLException轉化為DaoException, 其中SQLException屬於編譯時異常, DaoException繼承RuntimeEx

SpringMVC Dao注入到ServiceService注入到controller及相關XML

1 本人新手,剛開始學習SringMVC框架,需要各個層之間的注入。 舉個例子: 最初,在dao層實現service的方式是,new出來一個(每個方法都要new一次)。 IServiceImpl service =new IServiceImpl(); service.fill();

【基於SSH框架的個人部落格系統04】DAOService與Action

DAO層-資料的增刪改查 J2EE開發人員使用資料訪問物件(DAO)設計模式把底層的資料訪問邏輯和高層的商務邏輯分開.實現DAO模式能夠更加專注於編寫資料訪問程式碼。DAO層的每個類都依賴於SessionFactory,SessionFactory介面負責初始化Hibern

Spring配置事務在DaoService

【轉載自http://www.blogjava.net/hk2000c/archive/2007/11/01/157508.html】 【感謝原作者:hk2000c】 Spring通過AOP實現宣告式事務管理。通常通過TransactionProxyFactoryBean設

搭建DAOService程式碼

第一部分建立實體和對映檔案 1 通過資料庫生成的實體,此步驟跳過,關於如何檢視生成反向工程實體類檢視SSH框架搭建教程-反向工程章節     Tmenu和AbstractorTmenu是按照資料庫表反向工程形成的JAVA實體; 在形成實體的時候注意 1 名稱空

關於Daoservice的介面問題

在專案中發現Service層每個實現類都有一個介面,網上搜搜發現Dao層也存在這樣的情況。在我們專案中,我們使用的是Hibernate原生的Dao,並沒有新增額外的介面。而我們的service層中業務實現類和介面在絕大多數的業務場景中都是一一對應的,沒有介面是有多個公共實現類

spring quartzy的spring注入問題(daoservice

許久沒有寫博文了,今天來寫寫,畢業設計中遇到的某個小問題,及解決方法。 畢業設計中涉及到spring的定時器quartzy的使用, 遇到的問題是:quartzy中不能使用spring注入的方式注入dao層和service層,原因是spring在載入的時候先載入quarzy,後加載bean

java中daoservice的區別,為什麼要用service

讀了下面的文章 讓我豁然開朗 轉文: 首先解釋面上意思,service是業務層,dao是資料訪問層。 呵呵,這個問題我曾經也有過,記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒

一個專案中說系統分為表現控制邏輯DAO和最終資料庫五架構

PO(persistant object) 持久物件  在o/r對映的時候出現的概念,如果沒有o/r對映,沒有這個概念存在了。通常對應資料模型(資料庫),本身還有部分業務邏輯的處理。可以看成是與資料庫中的表相對映的java物件。最簡單的PO就是對應資料庫中某個表中的一條記錄,多個記錄可以用PO的集合。PO中

spring MVC中controllerservice的junit4測試

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResul

junit4 測試daoservice

       最近在學習ssh框架,難免會用到junit4 測試dao層 或service層,經常出現空指標。 原因:dao層和service層是[email protected]注入的,我在測試類直接ew了dao層一個物件,出現空指標錯誤,原來spring沒起作

[SSM]springmvc 中daoservice的區別

首先解釋面上意思,service是業務層,dao是資料訪問層。 呵呵,這個問題我曾經也有過,記得以前剛學程式設計的時候,都是在service裡直接呼叫dao,service裡面就new一個dao類物件,呼叫,其他有意義的事沒做,也不明白有這個有什麼用,參加