[轉]JAVA中Action層, Service層 ,modle層 和 Dao層的功能區分

首先這是如今最基本的分層方式,結合了SSH架構。modle層就是對應的數據庫表的實體類。Dao層是使用了Hibernate鏈接數據庫、操做數據庫(增刪改查)。Service層:引用對應的Dao數據庫操做,在這裏能夠編寫本身須要的代碼(好比簡單的判斷)。Action層:引用對應的Service層,在這裏結合Struts的配置文件,跳轉到指定的頁面,固然也能接受頁面傳遞的請求數據,也能夠作些計算處理。以上的Hibernate,Struts,都須要注入到Spring的配置文件中,Spring把這些聯繫起來,成爲一個總體。
 
通常java都是三層架構 數據訪問層(dao) 業務邏輯層(biz 或者services) 界面層(ui) action 是業務層的一部分,是一個管理器(總開關)(做用是取掉轉)(取出前臺界面的數據,調用biz方法,轉發到下一個action或者頁面)  模型成(model)通常是實體對象(把現實的的事物變成java中的對象)做用是一暫時存儲數據方便持久化(存入數據庫或者寫入文件)而是做爲一個包裹封裝一些數據來在不一樣的層以及各類java對象中使用 
dao是數據訪問層 就是用來訪問數據庫實現數據的持久化(把內存中的數據永久保存到硬盤中)
 
Dao主要作數據庫的交互工做 Modle 是模型 存放你的實體類 Service 作相應的業務邏輯處理 Action是一個控制器
java

 

簡單的說:程序員

struts 控制用的
hibernate 操做數據庫的
spring 用解耦的
詳細的說:
STRUTS 在 SSH 框架中起控制的做用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 Struts-confi g.xml. 主要控制邏輯關係的處理 .

hibernate 是數據持久化層 , 是一種新的對象、關係的映射工具 , 提供了從 Java 類到數據表的映射,也提供了數據查詢和恢復等機制 , 大大減小數據訪問的複雜度。把對數據庫的直接操做 , 轉換爲對持久對象的操做 .

SPRING 是一個輕量級的控制反轉 (IoC) 和麪向切面 (AOP) 的容器框架 , 面向接口的編程 , 由容器控制程序之間的(依賴)關係,而非傳統實現中,由程序代碼直接操控。這也就是所謂 「 控制反轉 」 的概念所在:(依賴)控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂反轉。依賴注入,即組件之間的依賴關係由容器在運行期決定,形象的來講,即由容器動態的將某種依賴關係注入到組件之中
起到的主要做用是解耦


Struts 、 spring 、 Hibernate 在各層的做用
1 ) struts 負責 web 層 .

ActionFormBean 接收網頁中表單提交的數據,而後經過 Action 進行處理,再 Forward 到對應的網頁。
在 struts-config.xml 中定義 , ActionServlet 會加載。
2 ) spring 負責業務層管理,即 Service (或 Manager).

1 . service 爲 action 提供統計的調用接口,封裝持久層的 DAO.

2 .能夠寫一些本身的業務方法。
3 .統一的 javabean 管理方法
4 .聲明式事務管理
5. 集成 Hiberante

3 ) Hiberante ,負責持久化層,完成數據庫的 crud 操做
hibernate 爲持久層,提供 OR/Mapping 。
它有一組 .hbm.xml 文件和 POJO, 是跟數據庫中的表相對應的。而後定義 DAO ,這些是跟數據庫打交道的類,它們會使用 PO 。
在 struts+spring+hibernate 的系統中,
對象的調用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。
數據的流向是 ActionFormBean 接受用戶的數據, Action 將數據從 ActionFromBean 中取出,封裝成 VO 或 PO,

再調用業務層的 Bean 類,完成各類業務處理後再 forward 。而業務層 Bean 收到這個 PO 對象以後,會調用 DAO 接口方法,進行持久化操做。







簡單的流程

SSH框架都是取其優勢的,
我的理解:
Hibernian 的最大好處就是根據數據庫的表反向生成實體類,而且還有關係在裏面,還有就是它的對數據的操做也很方便。
Spring 我理解的就是程序員的春天,省去了在類裏面new 對象的過程,把這個調用與被調用的關係直接展現到了配置文件裏,作任何操做都變簡單了。

我就這麼跟你說吧,
程序框架搭好,各類jar包導好後,開工了
就拿註冊功能來講 頁面只有兩個文本框 一個用戶名(uname) 一個密碼(pwd)
首先是action層:
它是負責在頁面和程序之間傳輸數據的,還有做用是作頁面跳轉。頁面由用戶填寫表單數據,點擊提交按鈕,頁面的表單數據由Hibernian自動封裝到該頁面表單所對應的ActionFrom(ActionFrom跟實體類不是一個東西,ActionFrom是頁面有什麼值,我類裏就寫什麼屬性,是封裝表單數據用的。而實體類是徹底按照數據庫的字段生成的,實體類能夠當作ActionFrom用,但ActionFrom絕對不能夠當作實體類用),這樣表單數據就以ActionFrom對象的形式在Action的點擊提交按鈕執行的那個方法裏存在了,這個時候你須要的就是把表單數據存入數據庫中,但若是數據庫裏並不是只有頁面上的uname和pwd兩個字段,還有其餘字段好比用戶狀態,那你就須要另行在程序裏給該屬性賦值了,不然會報非空錯誤,這裏的例子,頁面只有兩個文本框,數據庫也只有這兩個字段,就沒必要考慮那麼多了,到這一步,action的功能告一段落了,接着是把數據傳入BIZ層。
Biz層(業務邏輯層):
它負責的是對數據的處理,好比網站功能是點卡銷售,你就須要在這個層裏對點卡的打折啊其餘的數學問題作操做了,在這個例子裏,此層只作單純的數據傳遞做用,然後又到了DAO層。
Dao層(數據庫操做層):
它負責對數據向數據庫增刪改查的操做,很少解釋了。

以上例子,不使用spring的話,每一個層之間的數據傳遞你都須要new一個調用該層數據的類的實例,而使用了spring的話,你須要作的就是把Dao 層和Biz層的每一個類都寫一個接口類,接口類裏寫實現類的方法,在調用的時候不new 對象,直接用對象點(.)方法就能夠,別忘了對每一個對象加上set/get方法。

Biz層例子

private saveMyScheduleDaoImpl smsDI; //類裏定義寫接口(saveMyScheduleDaoImpl ),不要寫實現類,而且不new

set/get方法略·········

public List saveMySchedule(Schedule s)
{
return smsDI.saveMySchedule(s); //由於是接口的實例,因此要求該接口裏必須寫上實現類的全部方法,這樣才能點(.)
}

這裏只簡單寫了一個BIZ層的。

以上流程只是從頁面獲取值存入數據庫,是單向的Action層->Bzi層->Dao層的數據傳遞,Dao層->Biz層->Action層的數據傳遞和我剛剛將的同樣,就是反過來了。


到這一步的總結:
Dao層寫接口而且接口裏寫實現類的全部方法。
Biz層寫接口而且接口裏寫實現類的全部方法。調用Dao層方法只定義Dao層須要調用方法所屬的類的接口,然後添加get/set方法,再用該接口的沒有new的實例點(.)方法。
Action層同Biz層。

下面就是強大的spring的工做了-------依賴注入
全部改寫的死東西都寫完了,咱們就差在配置文件裏依賴注入了

找到spring的配置文件,先注Dao層,這個時候必定要注意一點,就是依賴注入的時候注的必須是實體類!! 而不是接口!!這是一種良好的變成習慣。
Dao層的依賴注入裏綁定的是你在往工程加Spring的時候讓你填寫SessionFactory的那個值,配置文件上面應該會有這個bean的。
而後是Biz層的依賴注入,一樣也是注實體類,根據我這個例子裏面會有smsDI須要綁定,這個時候填寫你注的Dao層的相對應的類的名字就行。
而後是Action層的依賴注入,大致同Biz層同樣。

依賴注入完畢後,你就能夠盡情的去嗨配了
web

相關文章
相關標籤/搜索