天天看點

《iOS 8開發指南》——第6章,第6.1節MVC模式基礎

本節書摘來自異步社群《ios 8開發指南》一書中的第6章,第6.1節mvc模式基礎,作者 管蕾,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

第6章 使用xcode編寫mvc程式

ios 8開發指南

在本書前面的内容中,已經學習了面向對象程式設計語言objective-c的基本知識,并且探索了cocoa touch、xcode和interface builder編輯器的基本用法。雖然我們已經使用了多個建立好的項目,但是還沒有從頭開始建立一個項目。在本章的内容中,将向讀者詳細講解“模型—視圖—控制器”應用程式的設計模式,并從頭到尾建立一個ios應用程式的過程,為讀者步入本書後面知識的學習打下基礎。

6.1 mvc模式基礎

當我們開始程式設計時,會發現每一個功能都可以用多種編碼方式來實作。但是究竟哪一種方式才是最佳選擇呢?在開發ios應用程式的過程中,通常使用的設計方法被稱為“模型—視圖—控制器”模式,這種模式被簡稱為mvc,通過這種模式可以幫助我們建立出簡潔、高效的應用程式。

6.1.1 誕生背景

在建立與使用者互動的應用程式時,首先必須考慮如下3點。

使用者界面:我們必須提供讓使用者能夠與之互動的東西,例如按鈕和文本框等。

對使用者輸入進行處理并做出反應。

應用程式必須存儲必要的資訊以便正确地響應使用者,這通常是以資料庫方式存儲的。

為了結合這幾個方面,一種方法是将它們合并到一個類中:将顯示界面的代碼、實作邏輯的代碼以及處理資料的代碼混合在一起。這是一種非常直覺的開發方法,但在多個方面束縛了開發人員。

當衆多的代碼混合在一起時,多個開發人員難以配合,因為功能單元之間沒有明确的界線。不太可能在其他應用程式中重用界面、應用程式邏輯和資料,因為這三方面的組合因項目而異,在其他地方不會有大的用處。總之,混合代碼、邏輯和資料将導緻混亂。而我們希望ios應用程式與此相反,解決之道便是使用mvc設計模式。

6.1.2 分析結構

mvc最初存在于desktop程式中,m是指資料模型,v是指使用者界面,c則是控制器。使用mvc的目的是将m和v的實作代碼分離,進而使同一個程式可以使用不同的表現形式。

mvc即“模型-視圖-控制器”,是xerox parc在20世紀80年代為程式設計語言smalltalk-80發明的一種軟體設計模式,至今已被廣泛使用,特别是coldfusion和php的開發者。

mvc是一個設計模式,它能夠強制性地使應用程式的輸入、處理和輸出分開。使用mvc的應用程式被分成3個核心部件,分别是模型、視圖、控制器。具體說明如下所示。

1.視圖

視圖是使用者看到并與之互動的界面。對于老式的web應用程式來說,視圖就是由html元素組成的界面。在新式的web應用程式中,html依舊在視圖中扮演着重要的角色,但一些新的技術已層出不窮,它們包括adobe flash和像xhtml、xml/xsl、wml等一些辨別語言和web services。如何處理應用程式的界面變得越來越有挑戰性。mvc一個大的好處是它能為你的應用程式處理很多不同的視圖。在視圖中其實沒有真正的處理發生,不管這些資料是聯機存儲的還是一個雇員清單,作為視圖來講,它隻是作為一種輸出資料并允許使用者操縱的方式。

2.模型

模型表示企業資料和業務規則。在mvc的3個部件中,模型擁有最多的處理任務。例如它可能用像ejbs和coldfusion components這樣的構件對象來處理資料庫。被模型傳回的資料是中立的,就是說模型與資料格式無關,這樣一個模型能為多個視圖提供資料。由于應用于模型的代碼隻需寫一次就可以被多個視圖重用,是以減少了代碼的重複性。

3.控制器

控制器用于接受使用者的輸入并調用模型和視圖去完成使用者的需求。是以當單擊web頁面中的超連結和發送html表單時,控制器本身不輸出任何東西和做任何處理。它隻是接收請求并決定調用哪個模型構件去處理請求,然後确定用哪個視圖來顯示模型處理傳回的資料。

現在我們總結mvc的處理過程,首先控制器接收使用者的請求,并決定應該調用哪個模型來進行處理,然後模型用業務邏輯來處理使用者的請求并傳回資料,最後控制器用相應的視圖格式化模型傳回的資料,并通過表示層呈現給使用者。

6.1.3 mvc的特點

mvc是所有面向對象程式設計語言都應該遵守的規範,mvc思想将一個應用分成三個基本部分:model(模型)、view(視圖)和controller(控制器),這三個部分以最少的耦合協同工作,進而提高了應用的可擴充性及可維護性。

在經典的mvc模式中,事件由控制器處理,控制器根據事件的類型改變模型或視圖。具體來說,每個模型對應一系列的視圖清單,這種對應關系通常采用注冊來完成,即把多個視圖注冊到同一個模型,當模型發生改變時,模型向所有注冊過的視圖發送通知,然後視圖從對應的模型中獲得資訊,然後完成視圖顯示的更新。

mvc模式具有如下4個特點。

(1)多個視圖可以對應一個模型。按mvc設計模式,一個模型對應多個視圖,可以減少代碼的複制及代碼的維護量,一旦模型發生改變易于維護。

(2)模型傳回的資料與顯示邏輯分離。模型資料可以應用任何的顯示技術,例如,使用jsp頁面、velocity模闆或者直接産生excel文檔等。

(3)應用被分隔為3層,降低了各層之間的耦合,提供了應用的可擴充性。

(4)因為在控制層中把不同的模型和不同的視圖組合在一起完成不同的請求,由此可見,控制層包含了使用者請求權限的概念。

mvc更符合軟體工程化管理的精神。不同的層各司其職,每一層的元件具有相同的特征,有利于通過工程化和工具化産生管理程式代碼。

6.1.4 使用mvc實作程式設計的結構化

通過使用mvc模式,在應用程式的重要元件之間定義了明确的界線。mvc模式定義了應用程式的如下3個部分。

(1)模型提供底層資料和方法,它向應用程式的其他部分提供資訊。模型沒有定義了應用程式的外觀和工作方式。

(2)使用者界面由一個或多個視圖組成,而視圖由不同的螢幕控件(按鈕、文本框、開關等)組成,使用者可與之互動。

(3)控制器通常與視圖配對,負責接受使用者輸入并做出相應的反應。控制器可通路視圖并使用模型提供的資訊更新它,還可使用使用者在視圖中的互動結果來更新模型。總之,它在mvc元件之間搭建了橋梁。

令我們開發者振奮的是,xcode中的mvc模式是天然存在的,當我們建立項目并開始編碼時,會自動被引領到mvc設計模式。由此可見,在xcode開發環境中可以很容易地建立結構良好的應用程式。