1. 程式人生 > >iOS中的MVC設計模式

iOS中的MVC設計模式

我們今天談談cocoa程式設計中的 模型檢視控制器(MVC)範型。我們將從兩大方面來討論MVC:

  1. 什麼是MVC?
  2. M、V、C之間的交流方式是什麼樣子的?

理解了MVC的概念,對cocoa程式開發是至關重要的。

一、MVC的概念

MVC是Model-VIew-Controller,就是模型檢視控制器,這些都是什麼東西呢?

MVC把軟體系統分為三個部分:Model,View,Controller。在cocoa中,你的程式中的每一個object(物件)都將明顯地僅屬於這三部分中的一個,而完全不屬於另外兩個。

Model = 你的程式是什麼(而不是你的程式是如何顯示的)

讓我們舉個例子,我們上中學的時候,我們的步步高電子詞典中有個遊戲叫“雷霆戰機”,也就是“打飛機”的遊戲,Model就是:你的小飛機的攻擊力是多少?你的小飛機上裝的是什麼武器,炮彈,導彈,還是鐳射炮?你的小飛機還有多少血?等等。再概括點說,就是你的程式將要實現的功能,或者是它所能幹的事情。

Controller = 如何使你的模型呈現給使用者(程式邏輯)

Controller是程式內部的邏輯,大多情況下你將看不到它,它將Model和View捆綁在一起,它將處理使用者的輸入,例如,你按開炮的鍵子,Controller就會通過內部的邏輯來處理你的要求,並在螢幕上做出相應的顯示,你將看到螢幕上的小飛機發出炮彈擊中敵機。這也是Controller控制View的顯示的例子。所以你可以把Controller看成是連線M和V的橋樑。

View = 在螢幕上你所看到的(是你的Controller的“奴才”)

接著前面的小飛機,View就是:你的小飛機是什麼樣子的,有一個還是兩個翅膀,有幾挺槍炮;還有,你的飛機在螢幕上的位置等等。總之,你在螢幕上看到的元件都可以歸類為View。

MVC可以幫助確保幫助實現程式最大程度的可重用性。各MVC元素彼此獨立運作,通過分開這些元素,可以構建可維護,可獨立更新的程式組建。

二、M V C之間的交流模式

好了,現在我們來討論MVC中各個元素之間的交流方式。

我們把程式分成三個部分,但並不希望他們完全獨立,因為那樣的話,我們的程式將毫無意義和功能而言。它們之間必然存在某種聯絡,使它們能有機的成為一個整體來實現各種強大的功能。而這種聯絡就是我們提到的交流方式。我們來看看下面的圖,此圖出自斯坦福大學CS193課程的課件。

圖中有幾條線把這三部分劃分開,有黃線,虛線,和白色的實線。我們把它們想象成路標。你可以看到,在M和V之間有兩條黃線,這表示什麼呢?它意味著你不能穿越這黃線,任何一個方向都不行。在圖的上部,你可以看到白色的虛線,它意味著你可以自由的穿越它,只要是安全的。那白色的實線呢?它代表你可以穿越,但你必須要買票,或者交點過路費。

好了,如果你覺得前面的比喻沒有使你明白的話,讓我們來講點實在的東西。

首先, 我們來看C和M之間的綠色箭頭,這箭頭的方向就代表著“發起對話”的方向,也就是說,發起對話的是C,而做出回答的是M。C可以問M各種各樣的問題,但M只是回答C的問題或要求,它不可以主動的向C要求什麼。還記得虛線是暢通無阻的意思吧,所以,C知道M的所有的事情,如果用程式碼來說明這件事情,就是說,C可以匯入M的標頭檔案或是M的介面(API)。因為C可以通過M的API,所以它就可以肆無忌憚的向M要求這要求那了。

我們再來看看另外的一個綠色箭頭,它是在C和V之間,和前一個綠色箭頭的意義一樣,它代表C可以直接地向V進行交流。你可以想想,C要把V放到螢幕上,並設定V的屬性,告訴它們什麼時候從螢幕上消失,把它們分成組等等。如果C不能自由的向V發號施令的話,程式的顯示將會多麼的困難,所以,C可以毫無限制地向V說話。

可能你已經注意到了,這個箭頭上還有outlet(輸出口),outlet可以看作是從C指向V的指標,它在C中被定義。outlet給我們提供了很大的方便,它使我們在C的內部就可以輕鬆準確地向V施令。C可以擁有很多的outlet,可以不止一個,這也使它可以更高效的和V進行交流。

那M和V之間可以交流麼?還記得黃線的意思麼?完全不可以通過,所以我們是不允許M和V進行交流的。這是因為我們不希望這三部分之間有過多的交流,你想想,假如V在顯示時出現了問題,比如有一個圖形沒有顯示出來,我們就要去查詢錯誤,因為C可以和V交流,M也可以和V交流的話,我們就要去檢查兩個部分。相反的,只有C可以和V交流的話,在出錯時,我們就只需要去C那裡查詢原因,這樣查詢錯誤不就很是簡單了麼?所以,我們不允許M和V之間有直接的聯絡,這也是在它們兩之間有兩根黃線的原因。

好的應用程式要具備與使用者互動的能力。如果沒有良好的互動性,程式的功能將會受到很大的限制。在MVC中,V是和使用者直接接觸的,使用者看不到M和C,所以,程式與使用者的互動必須通過V來實現,但V只是檢視而已,它並不能完全處理使用者的要求,所以,這就要求V必須有某種手段來向C傳送資訊,移交使用者的互動要求。這手段就是前面白色實線代表的過路費,你知道V不能知道C的一切,但它可以通過某種“手段”來和C進行交流,移交使用者互動責任。

我們接下來討論V是如何向C傳送資訊的。V對C的交流有三種不同的方式。

第一種我們稱為目標操作(target-action)。它是這樣工作的,C會在自己的內部“懸掛”一個目標(target),如圖中的紅白相間的靶子,對應的,它還會分發一個操作(action,如圖中的黃色箭頭)給將要和它交流的檢視物件(可能是螢幕上的一個按鈕),當按鈕被按時,action就會被髮送給與之對應的target,這樣V就可以和C交流了。但是在這種情況下,V只是知道傳送action給對應的target,它並不知道C中的類,也不知道它到底傳送了什麼。target-action是我們經常使用的方法。

第二種方式我們叫做委託(delegate)。有時候,V需要和C進行同步,你知道,使用者互動不僅僅是什麼按按鈕,劃滑塊,還有很多種形式。好了,讓我們來看看圖中的delegate黃色箭頭,你發現箭頭上又分出了四個小箭頭:should,did,will,還有一個沒標註的。絕大部分的delegate資訊都是should,will,did這三種形式。和英文意思相對應,should代表檢視物件將詢問C中的某個物件“我應該這麼做麼?”,舉個例子,有一個web檢視,有人點選了一個連結,web檢視就要問“我應該開啟這個連結麼?這樣做安全麼?”。這就是should資訊。那will和did呢?will就是“我將要做這件事了”,did就是“我已經做了這件事”。C把自己設定為V的委託(delegate),它讓V知道:如果V想知道更多的關於將如何顯示的資訊的話,就向C傳送delegate資訊。通過接受V發過來的delegate資訊,C就會做出相應的協調和處理。還有一點,每個V只能有一個delegate。

第三種方式就是資料來源(datasource),你知道,V不能擁有它所要顯示的資料,記住這點非常重要。V希望別人幫助它管理將要顯示的資料,當它需要資料時,它就會請求別人的幫助,把需要的資料給它。再者,iphone的螢幕很小,它不能顯示包含大量資訊的檢視。看圖中的datasource箭頭,和delegate類似,V會發送cout,data at資訊給C來請求資料。

好了,這就是V給C傳送資訊的三種形式。

最後一個問題。你看到M和C之間的白線,這意味著M不可以直接地,沒有限制的對C進行交流。但有時,這個方向的交流是必要的。當M中的一些東西發生變化時,C需要了解這些變化,那我們怎麼才能讓C知道M的變化呢?通知(Notification)和KVO是解決問題的好方法。它們是這樣工作的,當M中的某些東西發生變化時,他們會向C發出通知“嘿,老兄,注意了啊,我這發生變化了”,或者他們會發出指向變化的指標給C,或其他什麼的。總之,他們的工作模式是這樣的。

下面是我們的一個總結,cocoa忠實於MVC,所以理解cocoa的MVC是我們關鍵的開始,希望這些能使你明白一些。

C對M:API
C對V:Outlet
V對C:Target-action, Delegate,Datasource
M對C:Notification,KVO

這篇部落格清楚的說明了MVC的架構,程式碼的組織方式以及三者之間的互動手段

轉載自:http://wangwenhao.net/2011/10/20/mvc-in-ios/

相關推薦

Yii框架MVC設計模式

MVC是模型(Model)、檢視(View)、控制器(Controller)3個單詞的縮寫。 Model是指資料模型,是對客觀事物的抽象。 如一篇部落格文章,我們可能會以一個Post類來表示,那麼,這個Post類就是資料物件。 同時,部落格文章還有一些業務邏輯,如釋出、回收、評論

iOSMVC設計模式

我們今天談談cocoa程式設計中的 模型-檢視-控制器(MVC)範型。我們將從兩大方面來討論MVC: 什麼是MVC?M、V、C之間的交流方式是什麼樣子的?理解了MVC的概念,對cocoa程式開發是至關重要的。 一、MVC的概念 MVC是Model-VIew-Controll

MVC設計模式在網站的應用

設計 分享 階段 可用性 狀態 代碼 img 多個 如果 MVC設計模式在網站中的應用 以淘寶的購物車為例 一、結合六個基本質量屬性 可修改性 采用MVC設計模式的時候,可以將視圖、模型、控制器分析,將用戶動作、數據表示、應用數據分離開來,如果用戶需要以不同的視圖來展示,只

談談JAVA工程獅面試經常遇到的面試題目------什麼是MVC設計模式

轉載來源:https://www.cnblogs.com/selene/p/4506962.html  作為一名java工程獅,大家肯定經歷過很多面試,但每次幾乎都會被問到什麼是MVC設計模式,你是怎麼理解MVC的類似這樣的一系列關於MVC的問題。 【出現頻率】 【關鍵考點】

MMVVC設計方法介紹:經典MVC設計模式在Cocoa-MVC的一種實現方法

MVC介紹 MVC在WEB開發中用於界定工作屬於Server端還是WEB前端還是十分清晰的。這也就是大家目前常見的MVC設計模式: View<===>Controller<===>Model 即Controller作為粘合劑分別於View和Model進行雙向通訊。

關於前陣子學習ios MVC設計模式的小結

MVC模式是  Cocoa(Touch)的核心,其包含了一些基本的設計模式. 設計模式主要是運用面向物件特性程式設計的一些總結性的經驗. Cocoa MVC 模式包括 介面卡模式(委託Delegate就是介面卡模式).組合模式,命令模式,中介者模式,策略模式,觀察者模式.時

[Java][Web]Request 實現轉發和 MVC 設計模式

寫入 頁面 str quest 表示 請求轉發 但是 write att String data = "aaaaa"; request.setAttribute("data",data); // 將數據存在 request request.getRequestDispat

iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式

csdn bst 設計 cto mod 基類 load 引用 角色 1. 簡單工廠模式 怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式? 簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的

工廠模式(think in java設計模式

org 我們 import lac otf 返回值 類型 int ava 工廠模式:工廠模式是利用工廠類的工廠方法創建對象的一種設計模式,目的是創建對象,但是很多時候創建對象我們會考慮很多其他因素~~~~比如限定輸入,限定返回值是否某個,比如在創建的過程中進行一些判斷,通過

叠代器模式(think in java設計模式

一個 div 封裝 imp 叠代器 方法 println rri 數字 叠代器模式:用來叠代一個容器集合數組的一種模式。可能大家很多時候是用for循環進行叠代的,但是實際上for循環內部不能使用remove方法,但是叠代器可以,這是因為叠代器內部進行了該方法的邏輯處理。同樣

模板方法模式(think in java設計模式

方法 bst pac code pri ack 單點 size clas 模板方法模式:模板方法模式顧名思義就是一種構造模塊化的設計模式。將一次行為分為多種行為,靈活的調用不同模塊進行工作。比如在飯店吃飯,分為:點菜,吃飯,買單等行為無論什麽飯店大致都是這三種行為。因此我們

Java-MVC設計模式

客戶 image family control java mvc span 胖客戶端 jpg JavaWeb開發模式 C/S:客戶端 / 服務器 (胖客戶端) B/S:瀏覽器 / 服務器 (瘦客戶端) JavaBean: 就是一個普通類(實體bean),包

MVC設計模式

曲線 互動 關心 可用性 pan 多個 競爭對手 可維護 data- 在界面框架中,使用MVC的設計模式是最合適方式。為什麽這樣說呢?由於M是model的縮寫,就是表示模型意思。模型就是算法,業務邏輯。商業表示。這個是常常會變的,比方像銀行開發一個超市積分系統,對不同來

Qt MVC設計模式(五篇)

net details blog 模式 mvc設計模式 sdn .net 設計 mvc http://blog.csdn.net/qq_19672579/article/details/46952675http://blog.csdn.net/qq_19672579/art

Android與MVC設計模式

wikipedia 數據模型 後來 small 事先 wiki 兩個 修改 idt 寫在前面,之前做過一段時間移動開發,後來因為工作原因擱淺了,最新重新拿起Android權威編程指南學習,順道做個學習筆記。 首先呢,我想說無論是計算機科班出身還是培訓班出身,都聽說過高內聚

MVC設計模式用於用戶註冊表單提交到數據庫的中文亂碼問題

def tail post str fix clear trac csdn rfi 本文引用自:http://blog.csdn.net/wangchangshuai0010/article/details/12714575 java.sql.SQLException: I

MVC設計模式的優缺點

宋體 ont mil 優點 控制器 實現 family font pan 1)優點: 各司其職、互不幹涉; 有利於開發中的分工; 有利於組建的重用; 2)缺點: 系統結構和實現復雜; 視圖與控制器過於緊密; 不適用於小型甚至中型應用程序;MVC設計模式的優缺點

MVC設計模式-學習筆記

MVC設計模式-學習筆記1)如果嚴格按照MVC思想的話,瀏覽器首頁訪問的是控制器,然後再由控制器轉發到視圖2)位於WEB-INF/目錄下的資源,客戶端無法直接訪問,只能通過服務端轉發進入3)request對象也可用於資源的轉發request.getRequestDispatcher("/WEB-IN

Decorator設計模式的實現 裝飾設計模式學習筆記

Decorator設計模式的實現中 裝飾裝飾設計模式 a)當某個類的某個方法不適應當前業務的需要思路:》擴展父類的可供擴展的方法,可以使有,但不優》裝飾設計模式(推薦) 開發步驟: 1)寫一個普通類或寫一個普通類擴展[extends]一個父類 2)寫一個需要被包裝的實例變量 3)通過構造方式為被包裝的實例變量

javaweb三大框架和MVC設計模式

detail struts2 萬能 sdn 發的 struts 其他 article 改進 javaweb三大框架和MVC設計模式 轉載,原文請見https://blog.csdn.net/sunpeng19960715/article/details/50890705 一