模式-視圖-控制器模式(MVC)

1模型-視圖-控制器模式(Model View Controller)服務器

計算機程序在用戶界面方面曾經極大地限制了用戶的使用。在上世紀70年代, 一個計算機程序只能使用命令行與用戶交互。而今天的程序已經使用上了豐富的圖形界面,用戶可使用視窗、鼠標以及鍵盤等多種方式進行交互,它容許移動和改變某個元素。加強的用戶界面提供出了新的挑戰,而Model View Controller (或MVC) 模式就是專一於這個領域的,他幫助咱們建立更具備靈活性的程序。動畫

程序由用戶界面、事件邏輯以及數據模型組成。例如,標準的UI 組件中列表框和組合框就包括界面元素 (點擊區域、滾動條等等)、有關如何響應用戶輸入的邏輯機理、還有數據模型 (組件中包含的數據)。雖然有三種明確的元素,可是一般狀況下,開發者編寫代碼時更傾向於把全部元素集合在一個對象中,而不是由幾個對象來聯合工做。若是界面和數據統一在一個對象中,那麼它將致使一下弊端:spa

  • 難於使用對象外部的數據。 例如,若是一個對象定義了用戶輸入表格,而且也將用戶輸入保存在該對象內部, 那麼要將這些用戶輸入的數據發送給服務器就會較爲困難。他將客戶通訊任務放在相同的類中,或者在該對象中定義一個接口,該接口容許訪問數據,並提供惟一的訪問數據的手段。 這將致使建立的程序不具備靈活性。
  • 用戶界面難於修改。用戶界面和數據儲存在同一個對象中,那麼要使用新的用戶界面,你就必須爲每種數據建立一個用戶界面,並且還要從舊的用戶界面對象中將數據轉換出來。要修改用戶界面將是一個難辦的事情。設想一個程序用不一樣的圖表(線性圖,條形圖等等)顯示數據。若是每種圖表都與數據放在一塊兒,那麼將會難於修改圖表的樣式。
  • 多樣式同時查看數據將變得困難。 例如,你可能想要同時用兩種或以上的圖表樣式顯示一樣的數據。可是因爲數據鎖定在用戶界面中,你必須爲每種圖表複製數據。
  • 難於同步查看。這是上一個問題的延伸。例如,若是你不只想要同時以多種圖表顯示相同的數據,並且還但願隨着數據的改變而更新這些多樣式的圖表,那麼你就必須更新儲存在每種用戶界面中的相應數據。

以上全部的問題都是由於數據和用戶界面被鎖定在同一個對象中。而MVC 模式提供了一種方式,讓你能夠建立兩個及以上的對象來一塊兒工做。這種方法讓你的代碼能夠重複使用,從而建立極富靈活性的程序。命令行

2理解 MVC 元素對象

MVC 模式由三個子系統組成: 模型, 視圖以及控制器。在接下來的幾個部分,咱們將分別瞭解這幾個元素。而後咱們將瞭解他們是如何一塊兒工做的。 當咱們談論一個模型的用途,一個視圖的用途以及一個控制器的用途的時候,咱們稱他爲MVC 分組。blog

模型(Model)接口

模型就是在MVC 組合中用來儲存數據的元素。模型就是數據的倉庫,他獨立於視圖和控制器。它既能夠儲存元數據,好比字符串, 也能夠儲存複雜的數據。模型與視圖和控制器沒有任何關聯,這正是MVC 模式的一個特有機能,由於模型的獨立性正是MVC模式的靈活之處。事件

視圖Viewip

視圖是用戶界面的可視化部分。視圖使用數據模型的數據來繪製本身。一個視圖由動畫、用戶輸入表單、圖表、按鈕、聲音播放器或者其餘須要的任何類型的用戶界面組成。開發

理解視圖的關鍵是理解它僅僅由可視化元素以及用來讀取與使用數據模型的必要邏輯組成。

控制器Controller

控制器是負責獲取輸入內容 (例如,用戶輸入) 和更新模型或視圖的子系統。例如,若是模型須要更新數據,那麼控制器就是作這個的。

元素之間的關係

每一個元素與其餘元素之間都是一種特定的關係。模型始終與視圖和控制器保持獨立。這意味着模型不能與其餘任何元素髮生關係,可是不意味着模型不會與其餘元素通訊。當數據更新時,模型就會廣播消息。可是,重要的是模型僅僅廣播消息,而並不會設法搞清楚究竟誰在偵聽。事件的使用容許模型減小與其餘元素的關聯程度,從而爲靈活性提供了可能。

視圖老是要設法與模型發生關聯。視圖以兩種方式與模型交互: 偵聽數據更新的消息,並從模型讀取數據。但視圖不能向模型寫入數據。每一個視圖僅僅與他的模型保持一種關聯。由於視圖能夠與他的模型發生關聯,可是模型不能與使用他的視圖發生關聯,因此一個模型能夠成爲多個視圖的模型。

控制器也須要與模型發生關聯。控制器負責根據用戶輸入或者系統事件更新模型。

控制器與視圖之間的關係很是緊密。雖然能夠幾個視圖使用一個控制器,可是一般視圖和控制器之間的關係是一對一的。視圖包含了全部的用於用戶交互的界面元素。而控制器是響應用戶輸入的元素。在許多ActionScript 程序中,視圖和控制器是同一個類。而MVC 模式的這種變化常常被稱爲MVC的文檔視圖Document View執行。

MVC 模式的關鍵在於數據模型獨立於控制器和視圖而沒有任何關聯。視圖基於數據模型的改變而更新(刷新)。

 

相關文章
相關標籤/搜索