日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

iOS设计模式——MVC(Model-View-Controller)

發(fā)布時間:2025/5/22 c/c++ 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS设计模式——MVC(Model-View-Controller) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Modol View Controller(MVC)是一種最早的也是最成功的可重用的設(shè)計(jì)模式,70年代的時候首次在smaltalk編寫的程序中成功使用。基于MVC設(shè)計(jì) 模式,Cocoa整體架構(gòu)可以劃分為三個子系統(tǒng):Model, View, Controller,我們可以相應(yīng)的理解為:數(shù)據(jù)模型,視圖和控制器。


Modol View和Controller的角色

要想理解MVC設(shè)計(jì)模式中每個子系統(tǒng)的角色,我們就需要理解一個應(yīng)用程序的功能和行為。我們知道一個應(yīng)用程序通常需要存儲數(shù)據(jù)信息,檢索數(shù)據(jù)信息以及把這些數(shù)據(jù)信息呈現(xiàn)給用戶,同時還要允許用戶對數(shù)據(jù)進(jìn)行編輯(增刪查改等操作)。那么MVC的角色就分別為:

Model: 為應(yīng)用程序提供獨(dú)立的,不依賴于View和Controller子系統(tǒng)的數(shù)據(jù)模型。

View: 以一定的形式像用戶呈現(xiàn)數(shù)據(jù)并允許用戶對數(shù)據(jù)進(jìn)行操作。理解View的關(guān)鍵是要理解同樣的數(shù)據(jù)可以有不同的呈現(xiàn)方式,可以以列表的形式顯示,可以以圖片的形式顯示,有時根據(jù)需求只需顯示部分?jǐn)?shù)據(jù)。

Controller: 在 Model和View之間加入一個Controller的主要目的就是“去耦”,即消除Model和View之間的耦合性。用戶和View交互 時,View會通知Controller在View中有數(shù)據(jù)發(fā)生了更改,而Controller則會將這個數(shù)據(jù)的改變反應(yīng)到Model中。 Controller在這個過程中扮演轉(zhuǎn)義數(shù)據(jù)的角色(因?yàn)槌尸F(xiàn)在View中的數(shù)據(jù)可能是便于用戶閱讀的文字或是數(shù)字,而存儲在Model中的數(shù)據(jù)可能是 比較高效但不便于直接閱讀的二進(jìn)制或是其他存儲方式比如關(guān)系數(shù)據(jù)庫,Controller可以承擔(dān)轉(zhuǎn)化這兩種數(shù)據(jù)形式的職責(zé))。

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


第一步,滑動按鈕發(fā)生變化,發(fā)送一個消息給Controller;第二步,Controller發(fā)送消息告訴Model按鈕位置發(fā)生了變化需要更新 數(shù)據(jù)Value;第三步,Model更新完數(shù)據(jù)通知Controller;第四步,Controller完成對View中其他需要更新的 View控件的更新,比如上面的文字輸入框。

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


Cocoa中的MVC

在Cocoa框架中,可以說MVC設(shè)計(jì)模式被用到了極致。不但整個框架是基于MVC設(shè)計(jì)的(見下圖),而且在更小的范圍內(nèi)也廣泛使用了MVC。


Core Data簡化了很多應(yīng)用程序的Model部分的設(shè)計(jì);ApplicationKit包含了View, Controller通用的一些類。Foundation提供了對操作系統(tǒng)接口,NSObject基類,腳本支持以及其他特性的訪問。


小結(jié)

MVC設(shè)計(jì)模式減少了程序中模塊間的耦合性,但是有時候也增加了程序的復(fù)雜度。從長遠(yuǎn)來講,MVC這樣一個清晰的子系統(tǒng)分離設(shè)計(jì)可以減少系統(tǒng)的維護(hù) 開銷并且可以很方便的實(shí)現(xiàn)系統(tǒng)功能的增強(qiáng)和擴(kuò)展。另外一個考慮就是,子系統(tǒng)的分離對軟件測試工作也帶來了很大的方便,比如我們可以直接測試升級了的系統(tǒng) Model,而不一定非得通過用戶界面來測試,因?yàn)楫?dāng)通過用戶界面測試失敗時,我們不知道到底是界面導(dǎo)致的還是Model本身導(dǎo)致的或是兩者同時引起的。 再有就是,通常一個系統(tǒng)的View和Model是由不同的團(tuán)隊(duì)開發(fā)的,這樣每個子系統(tǒng)的清晰分離就顯得尤為重要了。



總結(jié)

以上是生活随笔為你收集整理的iOS设计模式——MVC(Model-View-Controller)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。