麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

關于MVC&Model2&Struts的一點看法

2019-11-18 12:56:33
字體:
來源:轉載
供稿:網友

  MVC
  MVC是Model-View-Controller的簡稱,原本是建立Smalltalk 應用的框架。框架支持代表應用狀態、屏幕表現和控制流的3個類,他們分別叫做Model、View和Controller。
  
  在Model發生變化的時候,通知View改變;在View需要查詢狀態的時候,向Model發送請求,當View做出一個動作時,比如對數據的修改等,通知Controller;Controller得到狀態改變信息時,發送請求給Model,并且Controller負責選擇顯示新的View。
  
  下圖是典型的Model-View-Controller范式,經常被表示為:一個互相連接的三角形。
  
 關于MVC&Model2&Struts的一點看法(圖一)


  
圖1 MVC 通常表示為3個互相連接的組件

  在Design Patterns: Elements of Reusable Object-Oriented Software一書中,作者以smalltalk MVC為例,贊揚了通知/訂閱者(notify/subscribe)協議和觀察者(Observer)模式的使用。其中局的一個經典的例子是對同一數據,系統可能需要不同的顯示視圖,比如條形圖、餅圖、數據表格等等,如下圖:
  
 關于MVC&Model2&Struts的一點看法(圖二)

  
圖2不同的View使用相同的Model

  圖2所示的每種視圖可能在同一時間顯示給不同的用戶。應用必須保證在其下面的數據或者模型改變時視圖的更新。為改變模型,用戶提交一個請求給控制器,由控制起來配合改變模型。數據視圖必須跟著改變,以反映最近的模型改變狀態。
  
  Smalltalk MVC 方案使用觀察者通知模式。在這種模式下,每個視圖注冊為一個模型數據的觀察者。然后模型可以通過發送消息給所有這冊觀察者,通知它們相關的改變。其為 Smalltalk MVC 框架已經通用化了,他也可以應用它其他平臺上面。
  
  Model2
  Model2是Sun公司為了解決jsp不易維護和功能塊難以復用提出的。Sun的技術人員,提出使用JSP 和 SERVLET同時來部署web 應用,SERVLET可以應付控制流,而 JSP則可專注于討厭的編寫Html的任務。
  
  結合使用 JSP 和 SERVLET 開始被稱為Model 2 ,而單獨使用JSP稱為Model 1。
  
  Model2并不是什么新的東西,其思想上實際是對MVC的一種繼續。很多場合,交互使用Model 2 和 MVC這兩個詞。但是還是存在一些爭論,即一個應用是否是 MVC,以及是否支持經典的觀察者通知模式。沒有觀察者通知的Model-View-Controller 有時被稱為MVC2 或Web MVC。
  
  層模式的MVC結構
  人們認為Model2不同于MVC的主要原因之一是:基于觀察者/通知模式的經典的MVC是難以在web環境下實現的。
  
  因為HTTP協議是一個請求/響應協議,客戶端有請求,服務器端才會有響應,沒有請求,就沒有響應。而觀察者/通知模式要求在服務器端發生變化時能主動給用戶端發消息更新。
  
  為了解決經典MVC模式難于在web環境下實現的問題,引入層模式將狀態改變和狀態查詢的職責加于控制器之上,并伴隨著改變通知。
  
  如圖3,分層的web 應用使用一種比傳統MVC模式更加“扁平”的模式。控制器被夾在表現層(View) 和 應用邏輯 (Model)之間。
  
 關于MVC&Model2&Struts的一點看法(圖三)

  
圖3 web應用的層模式

  每個組件的主要職責并沒有改變。流程有稍微改變,View不再與Model有直接的聯系,而它們之間的交互都通過Controller。即查詢狀態和改變通知都必須通過控制器;當視圖,或者表現層需要加工動態頁面時,它使用從控制器傳遞的數據而不是直接來自于模型層。這種改變去除了View 和 Model的耦合,答應控制器選擇數據和顯示這些數據的視圖。
  
  Struts概要介紹
  Struts實現層模式的MVC
  Struts是一個應用框架,它實現了層次化的MVC模式或者說Sun公司提出的Model2模式。
  
  在Model1模式的web編程中,Model部分可以交給EJB及JDBC實現,而View部分可以由Jsp完成,但是卻沒有合適的工具完成獨立的Contrroller。在Model2的思想提出由Servlet應付控制流,在Struts中Servlet就扮演了Front End Controller的角色。
  
  當客戶端提出請求,ActionServlet響應請求,并且在指定的Struts-Config.xml文件中查到請求對應的Action(Action是Struts引入的一個核心類,作為Back End Controller,在后文會介紹),對已經實例化的Action,ActionServlet為這個新的請求開一個線程,對未實例化的Action,ActionServlet將其實例化。
  
  Action作為Back End Controller可以與Model部分交互,以實現狀態改變或者狀態查詢,Action還將返回下一步的視圖選擇給ActionServlet。ActionServlet根據對應的Struts-Config.xml找到視圖選擇對應物理地址,并把新的View返回給用戶端。
  
 關于MVC&Model2&Struts的一點看法(圖四)

  
圖4 Struts實現層模式的MVC結構

  另一種常見的關于Srtuts實現MVC模式的看法是認為只有ActionServlet是Controller,而把Action看作BusinessLogic。我認為,這種看法是沒有前一種將Action視為Back End Controller的看法合理的,因為Controller部分需要完成的視圖選擇實際上是由Action實現的。
  
  之所以會有后一種不太合適的關于Struts實現MVC結構的看法存在,主要是起源于編程習慣問題,很多人喜歡把大量的業務邏輯交給Action處理,我認為這是不太合適的。一方面,這樣降低了代碼的可復用性;另一方面使Action看起來臃腫,降低了可讀性。所以,推薦的編程方式是把大量的業務邏輯抽出做成javaBean,以解放Action。
  
關于MVC&Model2&Struts的一點看法(圖五)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 激情午夜天 | 久久精品亚洲成在人线av网址 | 国产精品观看在线亚洲人成网 | 精精国产xxxx视频在线野外 | 看片一区二区三区 | 亚洲精品久久久久久 | 蝌蚪久久窝 | 国产精品成人免费一区久久羞羞 | 亚洲国产视频网 | 全黄性性激高免费视频 | 久久久久国产成人精品亚洲午夜 | 亚洲一区二区免费视频 | 久久精品视频日本 | 国产精品久久久久久久久粉嫩 | 一级国产精品一级国产精品片 | 国产成人强伦免费视频网站 | 久草视频手机在线观看 | 欧美电影在线观看 | 毛片视频网站在线观看 | 欧美亚洲啪啪 | 久久成人国产精品入口 | 国产精品18久久久久久久久 | 久久毛片| 欧美成人小视频 | 久久精品一区二区三 | mmmwww| 国产成人高清成人av片在线看 | 九九久久视频 | 在线免费日本 | 国产精品久久久久久久久久尿 | 成人激情视频网 | 欧美成人黄色小视频 | 日本a∨精品中文字幕在线 狠狠干精品视频 | 国产一级www | 久久小视频 | 亚洲不卡 | 久久精品免费网站 | 国产一区免费 | 欧美激情性色生活片在线观看 | 国产亚洲精品久久久久婷婷瑜伽 | 欧美一级黄色录像片 |