iOS設計模式——MVC(Model-View-Controller)

來源:互聯網
上載者:User

Modol View Controller(MVC)是一種最早的也是最成功的可重用的設計模式,70年代的時候首次在smaltalk編寫的程式中成功使用。基於MVC設計模式,Cocoa整體架構可以劃分為三個子系統:Model, View, Controller,我們可以相應的理解為:資料模型,視圖和控制器。

Modol View和Controller的角色

要想理解MVC設計模式中每個子系統的角色,我們就需要理解一個應用程式的功能和行為。我們知道一個應用程式通常需要儲存資料資訊,檢索資料資訊以及把這些資料資訊呈現給使用者,同時還要允許使用者對資料進行編輯(增刪查改等操作)。那麼MVC的角色就分別為:

Model: 為應用程式提供獨立的,不依賴於View和Controller子系統的資料模型。

View: 以一定的形式像使用者呈現資料並允許使用者對資料進行操作。理解View的關鍵是要理解同樣的資料可以有不同的呈現方式,可以以列表的形式顯示,可以以圖片的形式顯示,有時根據需求只需顯示部分資料。

Controller: 在Model和View之間加入一個Controller的主要目的就是“去耦”,即消除Model和View之間的耦合性。使用者和View互動時,View會通知Controller在View中有資料發生了更改,而Controller則會將這個資料的改變反應到Model中。Controller在這個過程中扮演轉義資料的角色(因為呈現在View中的資料可能是便於使用者閱讀的文字或是數字,而儲存在Model中的資料可能是比較高效但不便於直接閱讀的二進位或是其他儲存方式比如關聯式資料庫,Controller可以承擔轉化這兩種資料形式的職責)。

Controller的去耦作用如示(註:本文所用插圖來源於書《Cocoa Design Pattern》, Erik M.Buck 和 Donald A.Yacktman著):

第一步,滑動按鈕發生變化,發送一個訊息給Controller;第二步,Controller發送訊息告訴Model按鈕位置發生了變化需要更新資料Value;第三步,Model更新完資料通知Controller;第四步,Controller完成對View中其他需要更新的 View控制項的更新,比如上面的文字輸入框。

在上面的整個過程可能你會覺得Model和View明明可以直接互動,為什麼要引入Controller呢?原因就是,View通常會經常根據使用者需求而發生改變(相信經常和客戶打交道的朋友對此感觸頗深),而且使用者資料格式有時候也會發生改變(比如客戶要求資料需要從mysql資料庫遷移到oracle),這樣把View和Model分離出來就顯得極其重要了。

Cocoa中的MVC

在Cocoa架構中,可以說MVC設計模式被用到了極致。不但整個架構是基於MVC設計的(見),而且在更小的範圍內也廣泛使用了MVC。

Core Data簡化了很多應用程式的Model部分的設計;ApplicationKit包含了View, Controller通用的一些類。Foundation提供了對作業系統介面,NSObject基類,指令碼支援以及其他特性的訪問。

小結

MVC設計模式減少了程式中模組間的耦合性,但是有時候也增加了程式的複雜度。從長遠來講,MVC這樣一個清晰的子系統分離設計可以減少系統的維護開銷並且可以很方便的實現系統功能的增強和擴充。另外一個考慮就是,子系統的分離對軟體測試工作也帶來了很大的方便,比如我們可以直接測試升級了的系統Model,而不一定非得通過使用者介面來測試,因為當通過使用者介面測試失敗時,我們不知道到底是介面導致的還是Model本身導致的或是兩者同時引起的。再有就是,通常一個系統的View和Model是由不同的團隊開發的,這樣每個子系統的清晰分離就顯得尤為重要了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.