軟體設計模式-MVC

前幾天在看維基百科介紹 Ruby 程式語言的時候,看到 Ruby on Rails 是一個 MVC 的快速網站開發應用框架(Framework,在程式設計的領域是指一個提供該程式語言開發相關函數庫或是虛擬機器等等的環境),突然又出現一個縮寫名詞讓我忍不住轉而去查詢這個縮寫的意思,根據偉大的維基百科記載,MVC 的全文是:Model-View-Controller,是軟體工程上面的一種軟體設計模式(或稱軟體架構),接著一看這三個名詞分別代表的意思:

  • M(模型 Model)-程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能)。
  • V(檢視 View)-介面設計人員進行圖形介面設計。
  • C(控制器 Controller)-負責轉發請求,對請求進行處理。

 

對於這三個的解釋,首先要講一下傳統上對於網頁或應用程式開發的分工與設計模式,很多時候,人們會把做「網頁設計」的人想成一定就是「設計+程式」都要會,其實不然(雖然很多網頁設計人才是兩樣兼備),設計和程式是可以分開的,設計是程式與外界的「互動表現(Representation)」,而程式才是整個網頁互動的基礎,所有互動的參數傳遞、資料運算、回饋、資料呈現、資料抓取等等都是由程式負責,而這個工作其實很大部分是沒有表現出來的,舉例來說,設計就是打開瀏覽器,看到畫面上 Google 的 Logo 和下面的輸入框及搜尋按鈕,而當你按下搜尋,網頁會送出你輸入的值,傳送給一個檔案,由那個檔案負責做 Search 的運作,沒錯!那個檔案就是程式。

有時候因為網站的互動功能較少,或是為了做功能上的區隔,會將 UI 和 Logic 寫在同一個檔案(很多 PHP 網頁即是如此),所以才會給人一種「網頁(程式)設計就是整個網頁(也就是 UI)」的錯覺,MVC 就是把程式與設計做一個區隔,讓「設計人員專心做設計,程式設計師專心寫程式」。

而目前實務界最常採用的系統設計是前面提到的三層式架構,也就是由使用者介面、企業邏輯、資料庫三者連結而成的,使用者可以透過 UI 與系統互動,但是 UI 只負責與使用者互動並傳遞使用者改變的相關參數到下一層的企業邏輯去,由邏輯曾進行邏輯運算,而邏輯運算的廣大資料基礎便是建置在企業內部或是雲端上的資料庫、是資料倉儲、資料中心。

UI 和資料庫很容易區別,但是對於傳統寫網頁的人員而言,可能會和我一開始碰到「邏輯層」時一樣,不明白區別在哪裡,這個概念,其實就是 MVC 的實踐,可以用一個概念來思考:「UI 就是設計,Logic 就是程式」。

在這種分工合作的建設模式之下,不管哪一部分的開發都可以由這方面的專家團隊快速完成,減少專業的衝突與溝通,這也是為什麼企業在軟體工程逐漸採用 MVC 的原因,當然如果你能夠會寫程式又會設計,我想這對你而言應該不會是問題。

(圖片來源:codeproject1codeproject2