IOS 之MVC

來源:互聯網
上載者:User

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

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

 

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

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

視圖—渲染資料,  展示給使用者並接收使用者反饋。

 

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

 

1) Controller 可以直接和 model,view 通訊

 一般用法是controller直接引用model,view 執行個體對象。

 

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的關係圖,很是簡潔明了。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.