圖1-1展示了在經典MVC中的事件流。用戶與視圖(View)進行交互,填入數據并點擊按鈕,控制器(Controller)接收到來自視圖的事件并對模型(Model)進行操作,根據用戶提供的數據更新模型(Model)。視圖也會接到“模型改變”的事件通知,因此它會隨著模型而更新,將模型更新的結果顯示給用戶。我們通過注冊更多的事件監聽器對多個視圖和控制器進行配置,以便讓它們使用相同的共享模型。這種模式在單機且實時更新的應用程序中可以起到很好的作用。但是,在Web世界中,這種經典的MVC模式就失效了。在Web世界中,視圖是在客戶端的瀏覽器中生成的,而控制器和模型則是在服務器端,圖1-1很清楚地展示了設計的方法。但糟糕的是,這在HTTP和HTML的世界里是行不通的。因此,使用HTTP請求/響應模式的Web應用程序需要一個與MVC截然不同的設計,這個設計借用了MVC的名稱和一些方式。
在Web版本的MVC中,視圖是不能如圖1-1所示的那樣直接調用控制器的,但是可以基于Web請求映射成不同的URL。視圖不是一個可以被更新的對象,而是在客戶端發出一個新請求的時候隨之重新呈現的Web頁面。同時,模型也不能將自身的改變通知視圖,因為視圖呈現于另外一臺計算機的用戶瀏覽器中。因此,視圖每次都需要依照最新的數據重新生成。
圖1-2? Web應用程序中的MVC事件流圖1-2展示了應用在Web應用程序的MVC事件流。
在Web世界中的經典MVC應用程序是通過使用前端控制器模式來實現的。這個模式包含了一個分發器(在Java的Web MVC實現中,通過Servlet來實現分發器),而分發器將請求URL映射至需要被執行的命令實例(Command Instance),命令實例在WebWork或者Struts中就是action。action與系統后端的服務進行交互,通常這些服務會組合在一起作為模型。命令實例在處理完業務邏輯之后返回一個碼值,而這個返回碼會映射到某一個視圖(通常是一個Web頁面模板,譬如JSP)。最后,結合控制器和模型,視圖將會呈現給用戶。通常視圖會使用標簽庫,以便更簡單地訪問數值。
????????????
?????? 圖1-3和圖1-4展示了控制面板的兩種實現——前端控制器實現和頁面控制器實現之間的區別。由于X、Y和Z部分職責的分離,頁面控制器可能看起來更加模塊化一些,但是良好的面向對象設計也可以實現一個模塊化的前端控制器。如果你熟悉Struts,前端控制器模式看起來會更熟悉。即使你不熟悉其他的Web框架,前端控制器模式也應該是收集并呈現數據的最直接的方式了。盡管如此,一些框架則因為頁面控制器模式鼓勵封裝而應用之,如圖1-4所示。幸運的是,WebWork同時支持這兩種實現,將兩者的優點都呈現于你的面前
根據我們的經驗,框架可以極大地提高開發效率。為了能夠滿足用戶的需求并且應對來自不斷改變的商業世界的挑戰,我們強烈推薦你在構建Web應用程序的時候充分發揮MVC設計模式的優勢。事實上,絕大多數的開發人員并不會自己從零開始寫一個MVC框架,而是在已有框架(譬如WebWork)的基礎上進行改進。
??????
使用前端控制器MVC模式設計的控制面板的實現

使用頁面控制器MVC模式設計的控制面板的實現
posted on 2007-01-09 21:45
JavaCoffe 閱讀(395)
評論(0) 編輯 收藏 所屬分類:
Struts&&WebWork