iOS 技術淺談之第三篇(MVC設計模式)

wdfd 9年前發布 | 18K 次閱讀 IOS iOS開發 移動開發

前言:我記得在公司做的第一個項目,寫代碼是想到哪寫到哪,代碼沒有一點結構層次感。到后來我發現,項目出現BUG了維護起來真的好痛苦。還好項目不是很大,要是很大的項目,我都不知道怎么辦了。后來做項目我就在尋求設計模式,最后選擇了簡單易用的MVC模式。相信大家對于MVC不陌生吧,不管是前臺、后臺還是客戶端都可以用MVC模式來編寫你的項目。


1.介紹MVC模式

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫。

Model(模型)是應用程序中用于處理應用程序數據邏輯的部分。

通常模型對象負責在數據庫中存取數據。

View(視圖)是應用程序中處理數據顯示的部分。
通常視圖是依據模型數據創建的。
Controller(控制器)是應用程序中處理用戶交互的部分。
通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。
MVC 分層有助于管理復雜的應用程序,因為您可以在一個時間內專門關注一個方面。例如,您可以在不依賴業務邏輯的情況下專注于視圖設計。同時也讓應用程序的測試更加容易。
MVC 分層同時也簡化了分組開發。不同的開發人員可同時開發視圖、控制器邏輯和業務邏輯。

2.MVC的運用



模型對象封裝了應用程序的數據,并定義操控和處理該數據的邏輯和運算。例如,模型對象可能是表示游戲中的角色或地址簿中的聯系人。用戶在視圖層中所進行的創建或修改數據的操作,通過控制器對象傳達出去,最終會創建或更新模型對象。模型對象更改時(例如通過網絡連接接收到新數據),它通知控制器對象,控制器對象更新相應的視圖對象。


視圖對象是應用程序中用戶可以看見的對象。視圖對象知道如何將自己繪制出來,并可能對用戶的操作作出響應。視圖對象的主要目的,就是顯示來自應用程序模型對象的數據,并使該數據可被編輯。盡管如此,在 MVC 應用程序中,視圖對象通常與模型對象分離。


在iOS應用程序開發中,所有的控件、窗口等都繼承自 UIView,對應MVC中的V。UIView及其子類主要負責UI的實現,而UIView所產生的事件都可以采用委托的方式,交給UIViewController實現。


控制器在應用程序的一個或多個視圖對象和一個或多個模型對象之間,控制器對象充當媒介。控制器對象因此是同步管道程序,通過它,視圖對象了解模型對象的更改,反之亦然。控制器對象還可以為應用程序執行設置和協調任務,并管理其他對象的生命周期。

控制器對象解釋在視圖對象中進行的用戶操作,并將新的或更改過的數據傳達給模型對象。模型對象更改時,一個控制器對象會將新的模型數據傳達給視圖對象,以便視圖對象可以顯示它。

對于不同的UIView,有相應的UIViewController,對應MVC中的C。例如在iOS上常用的UITableView,它所對應的Controller就是UITableViewController。

  1. Model和View永遠不能相互通信,只能通過Controller傳遞。
  2. Controller可以直接與Model對話(讀寫調用Model),Model通過Notification和KVO機制與Controller間接通信。
  3. Controller 可以直接與View對話,通過outlet,直接操作View,outlet直接對應到View中的控件,View通過action向 Controller報告事件的發生(如用戶Touch我了)。Controller是View的直接數據源(數據很可能是Controller從 Model中取得并經過加工了)。Controller是View的代理(delegate),以同步View與Controller。
有關“模型-視圖-控制器”的完整信息,請參閱蘋果官方 Concepts in Objective-C Programming(Objective-C 編程中的概念)中的 Model-View-Controller


來自:http://blog.csdn.net/by3g123/article/details/44619191

 本文由用戶 wdfd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!