peace嘮叨

          人生得意須盡歡,莫斯金樽空對(duì)月。

          從MVC和三層架構(gòu)說到ssh整合開發(fā)-上

          相信很多人都認(rèn)同JavaWeb開發(fā)是遵從MVC開發(fā)模式的,遵從三層架構(gòu)進(jìn)行開發(fā)的,是的,大家都這么認(rèn)同。但是相信大家都會(huì)有過這樣一個(gè)疑問,if(MVC三層模式==三層架構(gòu)思想)out.println(“請(qǐng)繼續(xù)觀看……”)

          1.MVC(Model-View-Controller)設(shè)計(jì)模式:

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

               MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個(gè)部件里面,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個(gè)邏輯的圖形化用戶界面的結(jié)構(gòu)中。

          1. Model(模型):數(shù)據(jù)模型,提供要展示的數(shù)據(jù),因此包含數(shù)據(jù)和行為,主要提供了模型數(shù)據(jù)查詢和模型數(shù)據(jù)的狀態(tài)更新等功能,包括數(shù)據(jù)和業(yè)務(wù)。主要使用的技術(shù):數(shù)據(jù)模型:實(shí)體類(JavaBean),數(shù)據(jù)訪問:JDBC,Hibernate等,

          2. View(視圖):負(fù)責(zé)進(jìn)行模型的展示,一般就是我們見到的用戶界面,比如JSP,Html等

          3. Controller(控制器):接收用戶請(qǐng)求,委托給模型進(jìn)行處理(狀態(tài)改變),處理完畢后把返回的模型數(shù)據(jù)返回給視圖,由視圖負(fù)責(zé)展示。主要使用的技術(shù):servlet,Struts中的Action類等。

               MVC是一個(gè)框架模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。最典型的MVC就是JSP + servlet + javabean的模式。

          01

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

               三層架構(gòu)(3-tier architecture) 通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:表現(xiàn)層(User Interface layer)、業(yè)務(wù)邏輯層(Business Logic Layer)、數(shù)據(jù)訪問層(Data access layer)。區(qū)分層次的目的即為了“高內(nèi)聚低耦合”的思想。在軟件體系架構(gòu)設(shè)計(jì)中,分層式結(jié)構(gòu)是最常見,也是最重要的一種結(jié)構(gòu)。微軟推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或稱為領(lǐng)域?qū)樱⒈硎緦印?/p>

          1. 表現(xiàn)層(UI):通俗講就是展現(xiàn)給用戶的界面,用于顯示數(shù)據(jù)和接收用戶輸入的數(shù)據(jù),為用戶提供一種交互式操作的界面。

          2. 業(yè)務(wù)邏輯層(BLL):針對(duì)具體問題的操作,也可以說是對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理。對(duì)于數(shù)據(jù)訪問層而言,它是調(diào)用者;對(duì)于表示層而言,它卻是被調(diào)用者。也將業(yè)務(wù)邏輯層稱為領(lǐng)域?qū)印?/p>

          3. 數(shù)據(jù)訪問層(DAL):該層所做事務(wù)直接操作數(shù)據(jù)庫,針對(duì)數(shù)據(jù)的增、刪、改、查。如果要加入ORM的元素,那么就會(huì)包括對(duì)象和數(shù)據(jù)表之間的mapping,以及對(duì)象實(shí)體的持久化。也稱為是持久層。數(shù)據(jù)訪問層中包含實(shí)體層(Model 實(shí)體層)

          JavaWeb中典型的三層架構(gòu)是:Jsp+Struts/Spring+Hibernate的開發(fā)模式

          3.MVC和三層架構(gòu)的區(qū)別與轉(zhuǎn)化:

          1. MVC與三層架構(gòu)的概念區(qū)別:

          MVC是一種設(shè)計(jì)模式,我們可以用它來創(chuàng)建在域?qū)ο蠛蚒I表示層對(duì)象之間的區(qū)分。它是根據(jù)項(xiàng)目的具體需求來決定是否適用于該項(xiàng)目。

          三層架構(gòu)是一個(gè)分層式的軟件體系架構(gòu)設(shè)計(jì),它可適用于任何一個(gè)項(xiàng)目。

               三層架構(gòu)和MVC設(shè)計(jì)模式側(cè)重點(diǎn)不一樣,三層是一種籠統(tǒng)的架構(gòu)思想,沒有限制具體的設(shè)計(jì);而MVC就比較具體的說明它的設(shè)計(jì)方法。我們從接手一個(gè)項(xiàng)目開始,首先,我們需要進(jìn)行架構(gòu)設(shè)計(jì),一般我們采用的就是分層式的架構(gòu)設(shè)計(jì),即我們的三層架構(gòu)。然后,在確定了架構(gòu)以后,我們?cè)俑鶕?jù)項(xiàng)目的具體需求去考慮是否需要應(yīng)用一些設(shè)計(jì)模式,比如是否應(yīng)用我們的MVC模式,抽象工廠模式等等。

               三層側(cè)重的是整體的一個(gè)解耦,而MVC側(cè)重的是web系統(tǒng)的解耦,即側(cè)重jsp和Servlet的一個(gè)解耦。

          1. MVC與三層架構(gòu)的劃分層次區(qū)別:

          三層架構(gòu)將整個(gè)項(xiàng)目劃分為:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)、數(shù)據(jù)訪問層(DAL)。

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

          下圖可以說明他們的區(qū)別與聯(lián)系:通過圖中可以看到不是一一對(duì)應(yīng)的關(guān)系:V是UI,C是BLL,M是DAL的觀點(diǎn)是錯(cuò)誤的。

          02

          1. 兩者間的轉(zhuǎn)化:

               在我們項(xiàng)目中選擇了三層架構(gòu)的基礎(chǔ)上在根據(jù)具體需求決定是否需要使用MVC,于是我們常說的MVC中總是伴隨著三層架構(gòu),也就造成了兩者的容易混淆。其實(shí),通過上圖我們可以看到MVC將三成架構(gòu)中的UI分成了控制層和試圖層。將三層架構(gòu)中的數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層整合成了模型層。

          4. 針對(duì)三層架構(gòu)的MVC模式開發(fā)講解SSH框架:

          4.1 ssh介紹:

          SSH多個(gè)框架(struts2+spring+hibernate)的集成,是目前較流行的一種企業(yè)及Web應(yīng)用程序開源集成框架。

          1. Struts2:

               Struts2是流行和成熟的基于MVC設(shè)計(jì)模式的Web應(yīng)用程序框架。 Struts2不只是Struts1下一個(gè)版本,它是一個(gè)完全重寫的Struts架構(gòu)。Struts對(duì)Model,View和Controller都提供了對(duì)應(yīng)的組件。但是在ssh開發(fā)過程中主要用Struts作為三層架構(gòu)中的表現(xiàn)層,也就是MVC中的View和Control層。

          Struts2提供了表單提交參數(shù)封裝成POJO類,提交參數(shù)的類型轉(zhuǎn)換,輸入校驗(yàn),文件的上傳下載,程序的國際化,Struts2標(biāo)簽,以及對(duì)AJAX的支持。

          1. Hibernate:

               Hibernate是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,說的簡單點(diǎn):就是功能更加強(qiáng)大的JDBC。

               Hibernate實(shí)現(xiàn)了對(duì)象到數(shù)據(jù)庫端的封裝。就是常說的ORM(Object Relation Mapping),它的出現(xiàn)使得編程更加的面向?qū)ο螅趥鹘y(tǒng)的編程上,我們要將對(duì)象存儲(chǔ)到關(guān)系數(shù)據(jù)庫中,需要寫很多代碼來實(shí)現(xiàn),而且需要考慮跨數(shù)據(jù)庫的平臺(tái)的問題。有了Hibernate可以方便的實(shí)現(xiàn)從對(duì)象轉(zhuǎn)換到關(guān)系數(shù)據(jù)庫。這就是對(duì)象持久化。

          1. Spring:

               主要包含兩個(gè)重要功能:IOC和AOP,也就是常說的依賴注入和面向切面編程。當(dāng)然還有Spring的事務(wù)功能,不過這一功能是在結(jié)合前面兩者的功能實(shí)現(xiàn)的。

               IOC:依賴注入(控制反轉(zhuǎn)),是一種設(shè)計(jì)模式。一層含義是控制權(quán)的轉(zhuǎn)移:由傳統(tǒng)的在程序中控制依賴轉(zhuǎn)移到由容器來控制;第二層是依賴注入:將相互依賴的對(duì)象分離,在spring配置文件中描述他們的依賴關(guān)系。他們的依賴關(guān)系只在使用的時(shí)候才建立。簡單來說就是不需要NEW一個(gè)對(duì)象了。

               AOP這是一種面向切面的編程思想,這種思想使得編程思想上得到了歷史性的進(jìn)步。它將程序的執(zhí)行過程切割成不同的面,在面之間可以插入我們想執(zhí)行的邏輯。

          4.2 ssh的層次劃分:

          一進(jìn)行javaWeb開發(fā)很多時(shí)候我們按照這樣的層次進(jìn)行劃分:

          1、在表示層中,首先通過JSP頁面實(shí)現(xiàn)交互界面,負(fù)責(zé)傳送請(qǐng)求(Request)和接收響應(yīng)(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應(yīng)的Action處理,然后action進(jìn)行對(duì)請(qǐng)求處理并轉(zhuǎn)發(fā)給JSP頁面。

          2、在業(yè)務(wù)邏輯層中,管理服務(wù)組件的Spring IoC容器負(fù)責(zé)向Struts2提供具體的Action對(duì)象,提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對(duì)象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。

          3、在數(shù)據(jù)訪問層中,則依賴于Hibernate的對(duì)象化映射和數(shù)據(jù)庫交互,處理DAO組件請(qǐng)求的數(shù)據(jù),并返回處理結(jié)果,給業(yè)務(wù)邏輯層。

          按照MVC模式時(shí):Jsp對(duì)應(yīng)著表現(xiàn)層,struts2對(duì)應(yīng)控制層,Spring和Hibernate對(duì)應(yīng)模型層。

          分層不是絕對(duì)的,每個(gè)人的見解是不一樣的,僅供參考;

          03

          從MVC說道ssh整合開發(fā)上就介紹到這里,下部分主要是對(duì)ssh框架的整合,會(huì)介紹怎么使用ssh取開發(fā)一個(gè)簡單的web應(yīng)用。

          來自一條小鯊魚wpeace(rlovep.com)

          posted on 2016-03-30 14:40 王和平 閱讀(3180) 評(píng)論(2)  編輯  收藏 所屬分類: javaWeb

          Feedback

          # re: 從MVC和三層架構(gòu)說到ssh整合開發(fā)-上 2016-03-31 07:27 Pooch

          不錯(cuò)的文章。

          一直在用mvc的時(shí)候沒有辦法和3層結(jié)構(gòu)聯(lián)想在一起。  回復(fù)  更多評(píng)論   

          # re: 從MVC和三層架構(gòu)說到ssh整合開發(fā)-上 2016-04-03 15:29 王和平

          @Pooch
          謝謝  回復(fù)  更多評(píng)論   


          My Links

          Blog Stats

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 固阳县| 平谷区| 内江市| 察隅县| 平定县| 鹿邑县| 漳州市| 新河县| 瑞金市| 从化市| 麦盖提县| 新密市| 凤庆县| 玉树县| 延安市| 霍山县| 广东省| 鹿邑县| 西安市| 康平县| 房山区| 澄迈县| 江永县| 江源县| 馆陶县| 宁蒗| 鹤峰县| 普兰店市| 甘泉县| 信阳市| 咸阳市| 武义县| 陆丰市| 武强县| 师宗县| 辛集市| 莱阳市| 武隆县| 汶川县| 富川| 江都市|