熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

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

2013-11-23 20:32:23  來源: Java開源技術 

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

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

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

  
不同的View使用相同的Model

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

  
 web應用的層模式

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

  
Struts實現層模式的MVC結構

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

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28626.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.