• 沒有找到結果。

Model-View-Controller設計模式

第二章、 文獻探討

2.2 MVC設計樣式

2.2.3 Model-View-Controller設計模式

MVC是一種相當著名的而且廣泛被採用的設計樣式,最早可追溯到

Smalltalk1語言的Smalltalk-80 版本,在Smalltalk-80 中,使用者介面(UI)其背後主 要的概念就是MVC。

Model

模組

Controller View

控制中心 顯示層

圖 2- 10 MVC 運作模式

"Model"所代表的是應用程式的商業邏輯,是用來執行資料的處理或轉換、

回應請求資料的要求,以及回應變更資料的要求,Model 不用去管 View 與 Controller 的設計方式,它們可以透過特定的介面相互溝通。

"View" 是應用程式的表現畫面,也就是把資料做視覺化的呈現在使用者面 前,View 透過特定的介面與 Model 溝通,設計時也不會相互影響。

"Controller" 是應用程式的處理程序控制,提供改變 Model 中資料的機制,

透過 Controller 抓住由使用者所發出的鍵盤或滑鼠事件,以便告知 Model 資料已 改變的事實,亦是透過特定的介面與 Model 溝通。可以透過這種設計模型把應 用邏輯、處理過程和顯示邏輯分成不同的單元分別實作,使得程式在維護上開發

時有相當大的助益。

圖 2-11 為一個簡單 MVC 範例,假設欲設計一個時鐘程式,依據顯示方式 的不同可區分為數位式與指針式時鐘兩種,兩者皆顯示相同的時間,其中計時的 部份就是 MVC 中的 Model,該 Model 負責保存時間,也允許將時鐘設定成新的 時間;而數位式與指針式兩種呈現的方式不同,數位式的時鐘是利用數字的改變 來顯示時間,而指針式的時鐘則是以指針的移動來顯示時間,所表示的是相同的 時間;使用者可以利用滑鼠或是鍵盤操作時鐘,藉由事件的觸發,可以向 Model 送出重新設定時間的請求,而利用滑鼠或是鍵盤發出改變 Model 的狀態,這部 份就是 MVC 中的 Controller。

圖 2- 11 兩種不同顯示方式時鐘範例

目前以MVC設計模式開發系統的例子,則是以Struts框架為首;Struts是 Jakarta下的一個子計劃[11],其目的是以一個開放式的架構來建構Java的網路應 用程式,Struts就是以MVC設計模式而發展出來的架構。在Struts中的Model是利 用java beans 實作,JSP2對應到View,而Servlets3 對應到Controller與URI互相對 映,使得資料處理、系統功能以及外觀展現的處理能夠區分出來,整個的運作模 式如圖 2- 12 所示:

2 JSP,Java Server Page,http://java.sun.com/products/jsp/

3 Servlet,Java Servlet Technology,http://java.sun.com/products/servlet/

Model View (Java Bean) (JSPs)

圖 2- 12 MVC 運作模式 in java 1. Model 部分:

採用 JavaBean 和 EJB 元件,設計和實作系統的商業邏輯。根據不同的 請求從 Action 衍生具體 Action 處理物件。完成"做什麼"的任務來 呼叫由 Bean 構成的商業組件。

2. Controller 部分:

提供應用程式的處理程序控制(使用 Servlet),負責處理從用戶端傳送的 請求,分析請求後決定適切的處理者,交給該執行者處理,最後交給適當的 View 元件展現;控制器的作用是從用戶端接受請求,並且選擇執行對應的商 業邏輯,然後把結果送回到用戶端。Struts 提供了核心控制部分的實作,只需 要配置 ActionMapping 物件。

3. View 部分:

Struts 應用中的 View 部分是透過 JSP 技術實作的。為了使用 Model 中的 ActionForm 物件,必須用 Struts 提供的自定義標籤建立 HTML Form,利用 Struts 提供的自定義標籤庫編寫使用者介面把應用邏輯和顯示邏輯分離,

Struts 框架透過這些自定義標籤建立了 View 和 Model 之間的聯繫。

基於 MVC Framework 的設計、觀念與技巧,java opensource 也提出各式 各樣的解決方案,例如:apache 就實作了 jakarta turbine、jakarta struts、jakarta

Controller (Servlet)

Browser (User)

Display

request forward

request

tapestry、avalon…等;opensymphony 的 webwork、webwork2;其他的還有 Maverick、JPublish、JApple… 等等;也有包含更多的 J2EE 架構的實作 framework,例如:expresso、SOFIA、Spring 等。所以 MVC 設計模式在許多重 要軟體開發的場合中,都會出現它的足跡,也可以想見它的重要性。

相關文件