理解面向協(xié)議,以及 面向協(xié)議簡(jiǎn)單應(yīng)用

關(guān)于面向協(xié)議的介紹在百度上介紹的很多,也有比較不錯(cuò)的文章,這篇就很不錯(cuò)

先來(lái)看一下實(shí)現(xiàn)效果

實(shí)現(xiàn)效果圖.png

首頁(yè)控制器只有不到80行代碼就將效果實(shí)現(xiàn)了,是不是對(duì)控制器代碼的復(fù)雜程度大大減少了不少呢脑沿。此demo中用的的所有東西皆由268教育集團(tuán)提供,首頁(yè)也是模仿《268新課題》軟件首頁(yè)實(shí)現(xiàn)的臭胜,大家可以在App Store搜索一下,一款很不錯(cuò)的軟件对竣。如果有違反268的規(guī)定我會(huì)立即刪除文章和demo庇楞,demo內(nèi)容嚴(yán)禁私自盜用榜配。

因?yàn)榫W(wǎng)上關(guān)于這方面的demo很少否纬,大部分是理論,也不適合初學(xué)者蛋褥,我根據(jù)自己的理解寫(xiě)了個(gè)簡(jiǎn)單的demo临燃,寫(xiě)的很渣,高手請(qǐng)繞路。點(diǎn)擊下載demo

關(guān)于MVC理解:

第一次聽(tīng)MVC概念還是面試的時(shí)候,面試官問(wèn)我寫(xiě)項(xiàng)目的時(shí)候一般用什么模式寫(xiě)的,excuse?剛培訓(xùn)出來(lái)不懂啊胡亂說(shuō)一通,后來(lái)在網(wǎng)上簡(jiǎn)單查了一下MVC到底是啥也沒(méi)有深入的去了解它到底該怎么用,如何劃分層次.現(xiàn)在做開(kāi)發(fā)已經(jīng)有一段時(shí)間了,對(duì)MVC的概念以及用法已經(jīng)有了一定的理解.

MVC模型-視圖-控制器(Model-View-Controller)

模型(Model)

一般模型對(duì)象里面放的是數(shù)據(jù)請(qǐng)求的屬性,一般我們是這么寫(xiě)的,而.m里面則什么都沒(méi)有.如果你沒(méi)有用Masonry或SDAutolayout來(lái)自動(dòng)布局的話可能還需要計(jì)算一下視圖布局,view中的控件的fream來(lái)不是在view中來(lái)計(jì)算的而是在model中就已經(jīng)計(jì)算好了,對(duì)于這部分希望你看一下這個(gè)demo下載demo.這個(gè)里面利用是YYKit框架去實(shí)現(xiàn)計(jì)算字符的寬高的,有興趣的可以自己寫(xiě)一個(gè)NSMuttableAttstring屬性擴(kuò)展,也可以達(dá)到相同的目的

View

一般都都是一些子類化界面,比如自定義cell的視圖,tableView的headView等等,這里沒(méi)什么好說(shuō)的

控制器Control

用來(lái)控制一個(gè)或多個(gè)視圖對(duì)象和一個(gè)或多個(gè)模型對(duì)象之間關(guān)系,控制器對(duì)象因此是同步管道程序,通過(guò)它,視圖對(duì)象了解模型對(duì)象的更改,控制器對(duì)象還可以為應(yīng)用程序執(zhí)行設(shè)置和協(xié)調(diào)任務(wù),并管理其他對(duì)象的生命周期

控制器對(duì)象解釋在視圖對(duì)象中進(jìn)行的用戶操作,并將新的或更改過(guò)的數(shù)據(jù)傳達(dá)給模型對(duì)象膜廊。模型對(duì)象更改時(shí),一個(gè)控制器對(duì)象會(huì)將新的模型數(shù)據(jù)傳達(dá)給視圖對(duì)象,以便視圖對(duì)象可以顯示它.M和V永遠(yuǎn)不能相互通信,只能通過(guò)控制器傳遞乏沸。控制器可以直接與Model對(duì)話(讀寫(xiě)調(diào)用Model),控制器可以直接與View對(duì)話,通過(guò)接口,直接操作View,接口直接對(duì)應(yīng)到View中的控件,View通過(guò)action向控制器報(bào)告事件的發(fā)生(如用戶的點(diǎn)擊事件)爪瓜〉旁荆控制器是View的直接數(shù)據(jù)源(數(shù)據(jù)很可能是控制器從Model中取得并經(jīng)過(guò)加工了)∶控制器是View的代理(delegate),以同步View與Controller蝶缀。

層次分完了,很完美,但是網(wǎng)絡(luò)請(qǐng)求放哪里?你可能試著把它放在Model對(duì)象里,但是也會(huì)很棘手,因?yàn)榫W(wǎng)絡(luò)調(diào)用應(yīng)該使用異步,這樣如果一個(gè)網(wǎng)絡(luò)請(qǐng)求比持有它的Model生命周期更長(zhǎng),事情將變的復(fù)雜(這段話是網(wǎng)上說(shuō)的,具體會(huì)出啥結(jié)果我還沒(méi)有得到驗(yàn)證,我一般都是把網(wǎng)絡(luò)請(qǐng)求放入model中).顯然也不應(yīng)該把網(wǎng)絡(luò)代碼放在view里,因此只剩下控制器了,因?yàn)檫@加劇了厚重控制器的問(wèn)題。

基于MVC理解使用MVVM

Model-View-ViewModel 在MVVM里,view和viewcontroller正式聯(lián)系在一起,我們把它們視為一個(gè)組件薄货。視圖view仍然不能直接引用模型Model,當(dāng)然controller也不能翁都。相反,他們引用視圖模型view Model。view Model是一個(gè)放置用戶輸入驗(yàn)證邏輯,視圖顯示邏輯,發(fā)起網(wǎng)絡(luò)請(qǐng)求和其他各種各樣的代碼的極好的地方,由于展示邏輯(presentation logic)放在了view Model中(比如Model的值映射到一個(gè)格式化的字符串),視圖控制器本身就會(huì)不再臃腫谅猾。當(dāng)你開(kāi)始使用MVVM的最好方式是,可以先將一小部分邏輯放入視圖模型,然后當(dāng)你逐漸習(xí)慣于使用這個(gè)范式的時(shí)候再遷移更多的邏輯到視圖模型中.以我寫(xiě)項(xiàng)目的經(jīng)驗(yàn),使用MVVM會(huì)輕微的增加代碼量,但總體上減少了代碼的復(fù)雜性柄慰。

基于面向協(xié)議MVP的介紹

MVP到底是什么? M : 邏輯Model層 V : 視圖層 P : protocol協(xié)議層 其實(shí)MVVM已經(jīng)把層次分的很清楚了,VM將邏輯層和網(wǎng)絡(luò)層給分離出來(lái),那為什么又多出來(lái)個(gè)協(xié)議層呢? 視圖顯示大部分是基于協(xié)議去實(shí)現(xiàn)的,比如tableviewdelegate和tabledatasource協(xié)議,如果有兩個(gè)頁(yè)面有tableview都需要將協(xié)議實(shí)現(xiàn)一遍,不感覺(jué)有點(diǎn)重復(fù)造輪子了嗎?如果將協(xié)議抽離出來(lái)封裝成對(duì)象去實(shí)現(xiàn),那只需要寫(xiě)一個(gè)就可以了啊,理想情況下是這樣的,可是項(xiàng)目中每個(gè)頁(yè)面也總不能都長(zhǎng)一樣吧,這也只能應(yīng)用于簡(jiǎn)單的項(xiàng)目,有相似度的頁(yè)面税娜,我在網(wǎng)上查資料的時(shí)候坐搔,有人把事件操作(比如點(diǎn)擊事件)也封裝到了Model中,我認(rèn)為這是不是很好巧涧,控件肯定都是在view層薯蝎,如果實(shí)現(xiàn)事件響應(yīng)也是通過(guò)view層去block或代理去實(shí)現(xiàn),如果把事件封裝給Model谤绳,再通過(guò)Model與控制器交互進(jìn)行事件響應(yīng)占锯,感覺(jué)比較繁瑣而且代碼也不易理解,這個(gè)看個(gè)人理解吧缩筛。因?yàn)镸VP概念是剛剛了解消略,用的地方不是很多,就簡(jiǎn)單寫(xiě)了個(gè)demo將協(xié)議從控制器中分離出來(lái)感覺(jué)很實(shí)用瞎抛。demo是用swift寫(xiě)的艺演,本來(lái)是用OC,寫(xiě)OC那個(gè)demo東西比較亂比較雜桐臊,正好自己在學(xué)swift所以就用swift去實(shí)現(xiàn)了一下胎撤。具體實(shí)現(xiàn)是在Home文件夾下。demo中有用到代理断凶,block伤提,擴(kuò)展等方法,很適合初學(xué)者來(lái)了解swift认烁。

總的來(lái)說(shuō)這篇寫(xiě)的還是比較水的肿男,剛開(kāi)始介紹MVC模式來(lái)引申出來(lái)MVVM再到MVP后來(lái)寫(xiě)著寫(xiě)著把自己繞進(jìn)去了介汹,總的來(lái)說(shuō)MVP就是將協(xié)議層抽離出來(lái),比較適用于tableView視圖和CollectionView視圖舶沛,將協(xié)議抽出來(lái)很大程度的減少了Control的代碼量嘹承,使Control變得非常清晰,控制器只實(shí)現(xiàn)代理事件和數(shù)據(jù)刷新加載如庭,因?yàn)閐emo中沒(méi)有做數(shù)據(jù)的刷新叹卷,數(shù)據(jù)請(qǐng)求也是放到Model中去請(qǐng)求的,數(shù)據(jù)上拉加載更多的數(shù)據(jù)應(yīng)該是放在Control去實(shí)現(xiàn)的坪它,我想這也比較合理的豪娜。學(xué)習(xí)MVP也沒(méi)有幾天所以用的不好,有的東西也分的不是很清楚哟楷,此demo只適用初學(xué)者高手請(qǐng)繞路瘤载。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卖擅,隨后出現(xiàn)的幾起案子鸣奔,更是在濱河造成了極大的恐慌,老刑警劉巖惩阶,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挎狸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡断楷,警方通過(guò)查閱死者的電腦和手機(jī)锨匆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冬筒,“玉大人恐锣,你說(shuō)我怎么就攤上這事∥杼担” “怎么了土榴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)响牛。 經(jīng)常有香客問(wèn)我玷禽,道長(zhǎng),這世上最難降的妖魔是什么呀打? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任矢赁,我火速辦了婚禮,結(jié)果婚禮上贬丛,老公的妹妹穿的比我還像新娘撩银。我一直安慰自己,他們只是感情好瘫寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布蜒蕾。 她就那樣靜靜地躺著,像睡著了一般焕阿。 火紅的嫁衣襯著肌膚如雪咪啡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天暮屡,我揣著相機(jī)與錄音撤摸,去河邊找鬼。 笑死褒纲,一個(gè)胖子當(dāng)著我的面吹牛准夷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莺掠,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衫嵌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了彻秆?” 一聲冷哼從身側(cè)響起楔绞,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唇兑,沒(méi)想到半個(gè)月后酒朵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扎附,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蔫耽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留夜。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匙铡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碍粥,到底是詐尸還是另有隱情慰枕,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布即纲,位于F島的核電站具帮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏低斋。R本人自食惡果不足惜蜂厅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膊畴。 院中可真熱鬧掘猿,春花似錦、人聲如沸唇跨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至改橘,卻和暖如春滋尉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飞主。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工狮惜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碌识。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓碾篡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筏餐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子开泽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容