從MVC和三層架構說到ssh整合開發(上)

rlovep發表於2016-01-21

  相信很多人都認同JavaWeb開發是遵從MVC開發模式的,遵從三層架構進行開發的,是的,大家都這麼認同。但是相信大家都會有過這樣一個疑問,if(MVC三層模式==三層架構思想)out.println(“請繼續觀看……”)

 1.MVC(Model-View-Controller)設計模式:

  首先讓我們瞭解下MVC(Model-View-Controller)的概念:

  MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。

  1、Model(模型):資料模型,提供要展示的資料,因此包含資料和行為,主要提供了模型資料查詢和模型資料的狀態更新等功能,包括資料和業務。主要使用的技術:資料模型:實體類(JavaBean),資料訪問:JDBC,Hibernate等,

  2、View(檢視):負責進行模型的展示,一般就是我們見到的使用者介面,比如JSP,Html等

  3、Controller(控制器):接收使用者請求,委託給模型進行處理(狀態改變),處理完畢後把返回的模型資料返回給檢視,由檢視負責展示。主要使用的技術:servlet,Struts中的Action類等。

  MVC是一個框架模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務。最典型的MVC就是JSP + servlet + javabean的模式。

 2.三層架構(UI-BLL-DAL)思想介紹:

  三層架構(3-tier architecture) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(User Interface layer)、業務邏輯層(Business Logic Layer)、資料訪問層(Data access layer)。區分層次的目的即為了“高內聚低耦合”的思想。在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,從下至上分別為:資料訪問層、業務邏輯層(又或稱為領域層)、表示層。

  1、表現層(UI):通俗講就是展現給使用者的介面,用於顯示資料和接收使用者輸入的資料,為使用者提供一種互動式操作的介面。

  2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。對於資料訪問層而言,它是呼叫者;對於表示層而言,它卻是被呼叫者。也將業務邏輯層稱為領域層。

  3、資料訪問層(DAL):該層所做事務直接運算元據庫,針對資料的增、刪、改、查。如果要加入ORM的元素,那麼就會包括物件和資料表之間的mapping,以及物件實體的持久化。也稱為是持久層。資料訪問層中包含實體層(Model 實體層)

  JavaWeb中典型的三層架構是:Jsp+Struts/Spring+Hibernate的開發模式

 3.MVC和三層架構的區別與轉化:

  MVC與三層架構的概念區別:

  MVC是一種設計模式,我們可以用它來建立在域物件和UI表示層物件之間的區分。它是根據專案的具體需求來決定是否適用於該專案。

  三層架構是一個分層式的軟體體系架構設計,它可適用於任何一個專案。

  三層架構和MVC設計模式側重點不一樣,三層是一種籠統的架構思想,沒有限制具體的設計;而MVC就比較具體的說明它的設計方法。我們從接手一個專案開始,首先,我們需要進行架構設計,一般我們採用的就是分層式的架構設計,即我們的三層架構。然後,在確定了架構以後,我們再根據專案的具體需求去考慮是否需要應用一些設計模式,比如是否應用我們的MVC模式,抽象工廠模式等等。

  三層側重的是整體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。

  MVC與三層架構的劃分層次區別

  三層架構將整個專案劃分為:表現層(UI)、業務邏輯層(BLL)、資料訪問層(DAL)。

  MVC :即Model(模型),View(檢視),Controller(控制)。

  下圖可以說明他們的區別與聯絡:通過圖中可以看到不是一一對應的關係:V是UI,C是BLL,M是DAL的觀點是錯誤的。

  兩者間的轉化:

     在我們專案中選擇了三層架構的基礎上在根據具體需求決定是否需要使用MVC,於是我們常說的MVC中總是伴隨著三層架構,也就造成了兩者的容易混淆。其實,通過上圖我們可以看到MVC將三成架構中的UI分成了控制層和試圖層。將三層架構中的資料訪問層和業務邏輯層整合成了模型層。

 4. 針對三層架構的MVC模式開發講解SSH框架:

  4.1 ssh介紹:

  SSH多個框架(struts2+spring+hibernate)的整合,是目前較流行的一種企業及Web應用程式開源整合框架。

  Struts2:

     Struts2是流行和成熟的基於MVC設計模式的Web應用程式框架。 Struts2不只是Struts1下一個版本,它是一個完全重寫的Struts架構。Struts對Model,View和Controller都提供了對應的元件。但是在ssh開發過程中主要用Struts作為三層架構中的表現層,也就是MVC中的View和Control層。

  Struts2提供了表單提交引數封裝成POJO類,提交引數的型別轉換,輸入校驗,檔案的上傳下載,程式的國際化,Struts2標籤,以及對AJAX的支援。

  Hibernate:

     Hibernate是一個開放原始碼的物件關係對映框架,它對JDBC進行了非常輕量級的物件封裝,使得Java程式設計師可以隨心所欲的使用物件程式設計思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程式使用,也可以在Servlet/JSP的Web應用中使用,說的簡單點:就是功能更加強大的JDBC。

     Hibernate實現了物件到資料庫端的封裝。就是常說的ORM(Object Relation Mapping),它的出現使得程式設計更加的物件導向,在傳統的程式設計上,我們要將物件儲存到關聯式資料庫中,需要寫很多程式碼來實現,而且需要考慮跨資料庫的平臺的問題。有了Hibernate可以方便的實現從物件轉換到關聯式資料庫。這就是物件持久化。

  Spring:

     主要包含兩個重要功能:IOC和AOP,也就是常說的依賴注入和麵向切面程式設計。當然還有Spring的事務功能,不過這一功能是在結合前面兩者的功能實現的。

     IOC:依賴注入(控制反轉),是一種設計模式。一層含義是控制權的轉移:由傳統的在程式中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互依賴的物件分離,在spring配置檔案中描述他們的依賴關係。他們的依賴關係只在使用的時候才建立。簡單來說就是不需要NEW一個物件了。

     AOP這是一種面向切面的程式設計思想,這種思想使得程式設計思想上得到了歷史性的進步。它將程式的執行過程切割成不同的面,在面之間可以插入我們想執行的邏輯。

  4.2 ssh的層次劃分:

  一進行javaWeb開發很多時候我們按照這樣的層次進行劃分:

  1、在表示層中,首先通過JSP頁面實現互動介面,負責傳送請求(Request)和接收響應(Response),然後Struts根據配置檔案(struts-config.xml)將ActionServlet接收到的Request委派給相應的Action處理,然後action進行對請求處理並轉發給JSP頁面。

  2、在業務邏輯層中,管理服務元件的Spring IoC容器負責向Struts2提供具體的Action物件,提供業務模型(Model)元件和該元件的協作物件資料處理(DAO)元件完成業務邏輯,並提供事務處理、緩衝池等容器元件以提升系統效能和保證資料的完整性。

  3、在資料訪問層中,則依賴於Hibernate的物件化對映和資料庫互動,處理DAO元件請求的資料,並返回處理結果,給業務邏輯層。

  按照MVC模式時:Jsp對應著表現層,struts2對應控制層,Spring和Hibernate對應模型層。

  分層不是絕對的,每個人的見解是不一樣的,僅供參考;

  從MVC說道ssh整合開發上就介紹到這裡,下部分主要是對ssh框架的整合,會介紹怎麼使用ssh取開發一個簡單的web應用。

  相關文件:從MVC和三層架構說到ssh整合開發(下)

相關文章