MVC簡介


簡介

MVC是一種程式設計的模式,MVC是Model-View-Controller的簡寫,中譯是「模型-視圖-控制器」。這三種代表不同的角色與工作:

  • Model(模型):負責處理"資料(Data)"。不論是儲存資料、修改與接收資料。這些資料的通常放在資料庫中。一個良好的Model物件需要封裝應用程式的所需要的資料,和基本的行為,讓它們具備易用與重用性,而且與使用者操作介面或展現層(View物件)之間沒有明確的連繫。

  • View(視圖):負責處理"顯示(Display)"。即所謂的應用程式的呈現層(presentation),將應用程式的資訊依照需求,經過格式化後呈現給使用者。

  • Controller(控制器):負責處理"任務(Task)"。Controller扮演了Model和View的中介者,它可以連繫這兩者。Controller專責接收了來自客戶端的請求,呼叫對應的Model物件,然後把資料送給對應要呈現的View。

影片介紹

Andrew Eddie

MVC類別的種類

Joomla!系統設計了三個用於擴充套件開發的MVC基礎類別,分別是JModelLegacy、JViewLegacy與JControllerLegacy,再從這三個類別延伸出專用於不同應用的類別。

Legacy這個字詞是有遺留的意思,這樣取名的意思是要與2.5版本向下相容。將會與之後新版本中重新設計的MVC類別作一個區分。

Model 模型

模型在Joomla類別中是最多種類的,類別的定義程式檔案位於\libraries\legacy\model\目錄中。最基礎的類是:

  • JModelLegacy:基礎類別

以下三個是繼承自JModelLegacy,分別針對使用需求延申的類別。

  • JModelForm:編輯/新增項目時,或有需要填表單的功能時使用。
  • JModelList:多個項目列表時使用。
  • JModelItem:單一項目顯示時使用,有時也會直接使用JModelLegacy。

具有載入XML定義檔中表單欄位定義的除了JModelForm外,還有一個JModelAdmin,它是繼承自JModelForm,是一個更進階的類,用於管理單一項目,通常在後台管理區的元件功能裡,都是直接繼承它來作單一項目的管理。

  • JModelAdmin:後台管理區針對單一項目編輯與管理功能時使用。較JModelForm多了權限控管與批次管理的功能。

JModelList雖然是針對多個項目的列表管理使用,但對多個項目的批次處理工作,例如一次刪除多個項目、發佈/停止發佈多個項目,這是交給的單一項目的模型類別處理,而不是在在這個類別裡處理。

你可能會看到JModel或JModelBase,它們並不是設計給擴充套件開發者使用的,它們是用於定義的抽象類別,也沒有提供什麼預設的功能。

View 視圖

視圖在Joomla!中就只有三種,最常用是,其中最基礎的類是:

  • JViewLegacy

以下兩種是JViewLegacy的子類別,都是特定情況下才會使用的:

  • JViewCategory
  • JViewCategoryfeed

Controller 控制器

控制器在Joomla!中就只有三種,最常用是,其中最基礎的類是:

  • JControllerLegacy

下面這兩個是延申類別

  • JControllerAdmin:管理多個項目
  • JControllerForm:表單用途,管理單一項目

小結

MVC總結

  • MVC架構區分Model, View, Controller三種不同負責工作的程式區域
  • MVC架構是為了容易維護和擴充程式
  • 與使用者互動的是Controller
  • Model與View彼此的對應要靠Controller來連繫
  • 實際上開發時由程式設計師區分出MVC的程式碼工作

命名

在元件開發過程中,有三種的命名在實際使用時,會有互相參照的情況,所以要特別注意:

  1. 檔案的名稱
  2. 類別的名稱
  3. 方法的名稱

其他重要的類

  • JTable類別:它是一個Active Record設計模式的產物,具有對單一資料庫作CRUD的能力。通常會出現在Model中。

  • JDatabase:這是Joomla!中連接資料庫的類別,和資料庫處理的大小事都是靠它來作。你可以透過Joomla!中的工廠JFactory來得到它(注意:不是建立它)

  • Form Field:在Joomla! 2.5後中新增了JForm類別,專司處理網頁中表單欄位,開發者可以透過xml的設定來建立各式的表單欄位。這些表單欄位可以藉由這些類別,得到存取CMS中的資料、客戶端或伺服器端驗証等等的能力。