iOS-MVC設計模式,iosmvc

來源:互聯網
上載者:User

iOS-MVC設計模式,iosmvc

MVC設計模式

概述:Model-View-Controller(MVC),即模型-視圖-控制器。它將軟體系統分成三大部分:  Model,View,Controller三個部分通過某種機制通訊。

MVC的職能

  M(model)

    應用程式的核心,用於處理應用程式資料邏輯部分

  V(View)

    處理應用程式資料的顯示,通常依據Model建立

  C(Controll)

    處理使用者的互動

    從視圖讀取資料,控制使用者輸入,並向模型發送資料 

MVC之間的通訊

圖解(出自斯坦福大學cs193課程的課件)

這個模式其實應該叫做MCV,用控制器把model與view隔開才對,也就是model與view互相不知道對方的存在,沒有任何瓜葛,他們就像一個團隊裡吵了架的同事,如果有項目需要他倆來參與,那麼最好有第三者來管理他倆之間的溝通與協調。這個第三者就是控制器

既然管理,那麼姑且就把這個控制器提做專案經理吧,這樣的話讓他倆幹啥就得幹啥。就像斯坦福老頭說的視圖就是控制器的狗腿子。讓我們來欣賞一下這張圖

 

 

先撇開那些亂七八糟的箭頭單看他們之間的分界線,view與controller、model與controller之間的線是虛的,而model與view之間的是雙黃線,考過駕照的知道越過這個線意味著什麼吧。

 

控制器與視圖之間的大部分連線都可以在Xcode中通過按住ctrl來串連。例如outlet,例如delegate。有了這些連線,他們之間的溝通算是暢通無阻了。

1)使用者在view上的操作可以直接告訴控制器讓控制器去響應

2)view需要的代理也可以指派給控制器讓控制器去完成

3)view需要的資料來源也需要控制器來提供

總之,控制器很忙,因為它非常被動。

 控制器還需要一個角色的參與:model

顧名思義,模型。我覺得使用asp.net裡mvc的domain來描述比較好理解,領域。例如你要開發一個圖書管理系統,模型裡描繪的就是圖書的書名、售價、作者,誰借走了,幾號借走的,一切關於這個應用領域的資料。

我們可以給模型一個簡單的定義:它描述了一個應用所有需要抽象出來的資料結構和這些資料之間的關係,還有他們擷取資料需要通過的途徑(本地的、遠端)等。

有了模型,控制器想啥時候去拿數,想怎麼拿都行。

 

仔細觀察上面的圖,有控制器到model的箭頭,沒有model到控制器的箭頭。因為模型不需要知道控制器的存在,這樣可以減少耦合,提高代碼複用可能性。把你定義好的model挪到別的項目中,還可以使用。

但是問題來了,當model資料已經更新了,被修改了,怎麼通知相關的控制器?注意model上方有個天線,高端!之所以使用無線,是因為model不知道更改要發給誰,但是model可以廣播,model的觀點:誰關心我的更改讓誰收聽去,我對誰收聽了我不感興趣。

廣播的方式有兩種:Notification 和 KVO(都是設計模式,本系列接下來會詳述)

 

好了,他們幾個之間的關係基本有個概念了。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.