IOS 之MVC

MVC模式最早由Trygve Reenskaug1978年提出[1] ,是施樂帕羅奧多研究中心Xerox PARC)在20世紀80年代爲程序語言Smalltalk發明的一種軟件設計模式。MVC模式的目的是實現一種動態的程式設計,使後續對程序的修改和擴展簡化,並且使程序某一部分的重複利用成爲可能。除此之外,此模式通過對複雜度的簡化,使程序結構更加直觀。軟件系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。 ---(維基百科)

MVC 提出後,得到了廣泛的應用。 MFCJ2EE Java Swing.NET Perl Ruby on RailsPythonJavaScriptPHPActionScript3 等都有各自實現。對於IOS開發,同樣用到MVC。下面就MVCIOS 開發中的一些情況做做簡單的介紹。

 

模型反應你的程序是什麼. 但它不關心如何展示

控制器你的模型如何展示給用戶. 它關心UI邏輯

視圖渲染數據展示給用戶並接收用戶反饋。

 

MVC的所有內容就是在對上述三者的分工及通訊。

 

1) Controller 可以直接和 modelview 通訊

 一般用法是controller直接引用modelview 實例對象。

 

2) Model view 不應該直接通訊

 

3) View controller 之間的通訊

a)       View接收一些用戶事件,但並不涉及業務處理。所以一般是通過protocol-delegate方法,把用戶事件傳回給控制器處理

 

b)       View 不能擁有數據,但view的展示需要數據。一般也是通過協議去獲取。例如UITableView,其獲取數據的方式就是通過定義UITableViewDatasource 這個協議去獲取。

 

 

4) Controller 一般會作爲數據源(而不是模型)

 同樣,參考UITableViewController,其實現了 UITableViewDataSource, 而不是model實現該協議。

 

5 Controller 並要時需解析/格式化 model返回的數據給View

 View 不關注業務邏輯。 Model 不關注view。這就導致model返回數據,可以在某些情況下並不適於view直接展示。因此,這時controller 一般需要先針對view的需要處理好數據,然後才交給view

  另一典型情況是系統錯誤信息的處理。系統報錯信息五花八門,但不是每一條信息都適合直接給用戶展示。因此,controller 這時也是需要對錯誤信息先進行處理,然後才能放行,交給view

 

 

6 Model controller 通訊?

Model 應該是跟UI 獨立的。如果model 有信息需要更新或者其他任意事件需要反饋,一般使用消息/通知模式。

例如一些後臺處理程序:郵件刷新,數據統計等用戶並不關心(UI觸發),但又需要提示用戶。這時可以在相應的controller設立消息接收器,而model,則在需要觸發響應時,通過通知的方式,把信息發放出去。而它自己,其實是不理會消息的後續的情況的。

 

 

下面是從斯坦福教程中截圖的一副MVC的關係圖,很是簡潔明瞭。

 

 

另附兩張不同MVC模型間的聯繫的圖片

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章