MVC
是iOS開發(fā)中一種很基礎的工程架構模式檬洞,也是構建iOS應用的標準模式煞茫。它將數(shù)據(jù)模型
效五、UI視圖
和邏輯控制器
分開并規(guī)定它們之間的通信方式黎茎,大大優(yōu)化了程序的結構組織囊颅。
M表示
Model
,專門用來存儲對象數(shù)據(jù)的模型
工三,一般使用一個繼承NSObject的基本類對模型的數(shù)據(jù)進行封裝迁酸,在.h文件中聲明一些用來存放數(shù)據(jù)的屬性。在CoreData
中模型即Managed Object
俭正。
V表示
View
的可見元素奸鬓,展示UI界面給用戶,主要為UIKit
中UIView
的子類掸读,其中和用戶進行交互的視圖元素為UIKit
子類UIControl
下的子類視圖串远,非UIControl子類
的視圖不能交互。
C表示
Controller
儿惫,邏輯控制器澡罚,對應于UIKit
中UIViewController
及其子類控制器,負責協(xié)調(diào)View
和Model
肾请。
Controller
和View
的通信主要通過一些代理協(xié)議
以及block代碼塊
等實現(xiàn)留搔;而Controller``和Model
的通信主要用到Notification消息通知
和KVO
等典型觀察者模式
實現(xiàn);View
和Model
是隔離的铛铁,不可以直接相互通信隔显。
MVC設計模式
是官方推薦在iOS開發(fā)中使用的規(guī)范模式却妨,應用的數(shù)據(jù)存儲在Model
層,邏輯處理在Controller
中進行括眠,而用戶界面在View
中展示彪标。
如何理解MVC設計模式?
MVC
全名是Model View Controller
,是模型(Model)
—界面視圖(View)
—控制器(Controller)
的縮寫掷豺,它是一種軟件設計規(guī)范捞烟,用一種將業(yè)務邏輯、數(shù)據(jù)当船、界面顯示分離的方法組織代碼题画,將業(yè)務邏輯聚集到Controller
中,在改進和個性化定制界面及用戶交互的同時生年,不需要編寫業(yè)務邏輯婴程。可以用圖1來描述通過控制器實現(xiàn)的視圖到模型的交互過程抱婉。
1.模型對象
模型對象封裝了應用程序的數(shù)據(jù),并
定義了操控和處理該數(shù)據(jù)
的邏輯
和運算規(guī)則
桌粉。用戶在視圖層
中所進行的創(chuàng)建或者修改數(shù)據(jù)的操作蒸绩,會通過控制器對象傳達出去,最終會創(chuàng)建或更新模型對象铃肯。另外患亿,當模型對象更改時(例如,通過網(wǎng)絡連接接收到新數(shù)據(jù))押逼,模型對象會通知控制器對象步藕,控制器對象更新相應的視圖對象。被模型返回的數(shù)據(jù)是中立的挑格,也就是說模型和數(shù)據(jù)格式無關咙冗,這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應用于模型的代碼只需要寫一次就可以被多個視圖重用漂彤,所以減少了代碼的重復性
雾消。
2.視圖對象
視圖對象是應用程序中用戶可以看到并且能夠與之交互的界面。視圖對象對外提供
顯示自身和響應用戶操作的接口
挫望。視圖對象的主要作用就是顯示來自應用程序模型對象的數(shù)據(jù)
立润,并使該數(shù)據(jù)可被編輯
。在iOS應用程序開發(fā)中媳板,所有的控件桑腮、窗口等都繼承自UIView
,對應于MVC
中的View
蛉幸。
3.控制器對象
在應用程序的
一個或多個視圖對象
和一個或多個模型對象
之間破讨,控制器對象充當媒介
丛晦。因此,控制器對象是同步管理程序添忘,通過控制器對象采呐,視圖對象了解模型對象的更改,反之亦然搁骑「拢控制器對象還可以為應用程序執(zhí)行設置和協(xié)調(diào)任務,并管理其他對象的生命周期仲器∶郝剩控制器對象解釋在視圖對象中進行的用戶操作,并將新的或更改過的數(shù)據(jù)傳達給模型對象乏冀。模型對象更改時蝶糯,一個控制器對象會將新的模型數(shù)據(jù)傳達給視圖對象,以便視圖對象可以顯示它辆沦。
MVC設計模式的
低耦合性
昼捍、高重用性
、可維護性
等優(yōu)點顯而易見肢扯,使得原本復雜的代碼與界面的交互變得簡單妒茬、清晰、明了蔚晨,開發(fā)者可以把更多的精力放在前端界面的設計上乍钻,而不用絞盡腦汁去思考究竟應該如何使界面得到同步,這樣減輕了設計壓力铭腕,也從另一方面使用戶得到更多更好的享受體驗银择。事實上,MVC設計模式也是蘋果公司推薦并在大量實踐的設計模式累舷。例如浩考,對于不同的UIView
類型的視圖對象,都有相應地控制器對象(即UIViewController
)與之對應笋粟。例如怀挠,常用的視圖類UITableView
,它所對應的控制器對象就是UITableViewController
類對象害捕。
MVC設計模式有哪些優(yōu)缺點?
- MVC的優(yōu)點如下:
1.代碼具有低耦合的特性
耦合性
绿淋,也稱塊間聯(lián)系
,指程序結構中各模塊間相互聯(lián)系緊密程度的一種度量尝盼。模塊之間聯(lián)系越緊密吞滞,其耦合性就越強,模塊的獨立性越差。在MVC設計模式中裁赠,由于視圖層
殿漠、業(yè)務層
和數(shù)據(jù)層
的分離,每個模塊之間相互獨立佩捞,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼绞幌。同樣,一個應用程序的業(yè)務流程或者業(yè)務規(guī)則的改變只需要改動MVC的模型層即可一忱。因為模型
與控制器
和視圖
相分離莲蜘,所以很容易改變應用程序的數(shù)據(jù)層和業(yè)務規(guī)則。
2.高重用性和可適用性
隨著技術的不斷進步帘营,現(xiàn)在需要用越來越多的方式來訪問應用程序票渠。MVC設計模式允許用戶使用各種不同樣式的視圖來訪問同一個服務器端的代碼。它包括任何
Web(HTTP)瀏覽器
或者無線瀏覽器(WAP)
芬迄。例如问顷,用戶可以通過計算機也可通過手機來訂購某樣產(chǎn)品,雖然訂購的方式不一樣禀梳,但處理訂購產(chǎn)品的方式是一樣的杜窄。由于模型返回的數(shù)據(jù)沒有進行格式化,所以同樣的構件能被不同的界面使用算途。例如羞芍,很多數(shù)據(jù)可能用HTML
來表示,也有可能用WAP
來表示郊艘,這些表示所需要的命令是改變視圖層的實現(xiàn)方式,而控制層
和模型層
無須做任何改變唯咬。
3.較低的生命周期成本和高可維護性
MVC設計模式
使視圖層
和業(yè)務邏輯層
分離纱注,使得應用更易于維護和修改,開發(fā)和維護用戶接口的技術含量降低胆胰,技術人員只要關心指定模塊的代碼邏輯即可狞贱。
4.有利于軟件工程化管理
由于不同的層各司其職,每一層不同的應用具有某些相同的特征蜀涨,有利于通過工程化瞎嬉、工具化管理程序代碼。
- MVC的缺點如下:
1.增加了系統(tǒng)結構和實現(xiàn)的復雜性
MVC設計模式
適合用戶界面和業(yè)務邏輯比較復雜的應用程序厚柳。對于簡單的界面氧枣,嚴格遵循MVC設計模式,使模型别垮、視圖與控制器分離便监,會增加結構的復雜性,并可能產(chǎn)生過多的更新操作,降低運行效率烧董。
2.視圖與控制器間的過于緊密的連接
雖然視圖與控制器之間是相互分離的毁靶,但在實際開發(fā)中,
視圖
與控制器
確又是聯(lián)系緊密的部件逊移,視圖沒有控制器的存在预吆,其應用是很有限的,反之亦然胳泉,這樣就妨礙了它們的獨立重用拐叉。
3.視圖對模型數(shù)據(jù)的低效率訪問
依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)胶背。對未變化數(shù)據(jù)的不必要的頻繁訪問巷嚣,也將損害操作性能。
4.控制器臃腫
大量邏輯處理代碼全部放入
ViewController控制器
中钳吟,加上要遵循很多協(xié)議
廷粒,會導致其變得臃腫和混亂,難以維護和管理红且,也難以分離模塊進行測試坝茎。
5.缺少專門放網(wǎng)絡邏輯代碼的部分
導致網(wǎng)絡邏輯處理只能放在
Controller控制器
中,加劇了Controller控制器
部分的臃腫問題暇番。