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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC、MVVM、RaectiveCocoa的总结

發布時間:2023/12/29 c/c++ 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC、MVVM、RaectiveCocoa的总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文所有Demo地址:https://github.com/iOSaFei/MVC-MVVM-ReactiveCocoa-

真的理解MVC嗎?

從剛開始做iOS項目的時候,就知道要使用MVC,雖然不懂為什么但總是會建三個文件夾。寫的東西多了見的東西多了才發現還欠MVC一次總結。

為了有權威性先擺上斯坦福大學公開課上的一幅圖:

這幅圖需要注意以下幾點:
Model:數據模型,負責數據的獲取及存放,數據的獲取可能是網絡請求也可能是本地數據庫訪問,存放是指數據解析之后放在Model中方便Controller提供給View使用。

View:視圖,負責UI的展示,它是需要數據的。

Controller:控制器,協調數據和視圖(將Model中的數據提供給視圖)。

Controller持有Model和View,Model和View之間不應該持有、也就是Model不能直接和View通信,這體現出了MVC數據模塊與視圖模塊的分離。提高了程序的可維護性、可移植性、可擴展性與可重用性。

Model和Controller之間采用KVO和Notification通信,為什么不用Block和代理?從技術上是可以的,但是在MVC中,Model不需要知道被Controller持有,KVO和Notification在解耦和方面比Block要好,但是Block很方便,使用全憑個人愛好。

Controller和View采用委托(代理和數據源)或target-action,前者的典型UITableView,后者諸如UIButton等。

知道了這些就可以用MVC寫東西了,但是似乎Model這塊怎么寫還是不是那么的清楚?而且很容易寫成Massive View Controller 模式。就比如在Controller中直接使用AFNetwrking請求、然后將請求的數據在Controller中解析成Model,這是最不推薦的一種寫法,AFNetworking如果不維護了呢?這樣寫Controller里代碼增加了多少?這里我給出一種MVC的Demo供大家借鑒,這里我將每個網絡請求都封裝成了一個類。另外給出一個我看到并受益的觀點:
1、將 UITableView 的 Data Source 分離到另外一個類中。
2、將數據獲取和轉換的邏輯分別到另外一個類中。
3、將拼裝控件的邏輯,分離到另外一個類中。

MVVM的出現

MVVM是MVC發展的產物,從命名中可以看出這種模式減少了Controller的職責。

在這種模式下:
Model的職責依然是獲取數據,但不會去負責給View提供數據了。
View-Model負責將Model獲取的數據解析成View所需要的數據模型。
而此時Controller則不再需要負責Model轉換的邏輯了(事實上、上面MVC的demo中我就已經優化了這一點、因為MVC并沒有指出數據解析應該放在哪里)。
view的任務就是呈現由view-model提供的數據。

如果只有以上這些不同,你可能會覺得這跟MVC根本沒什么差異。MVVM 在使用過程中,通常還會利用雙向綁定技術:Model 變化時,ViewModel 會跟著自動改變,而 ViewModel 變化也會引起 View 自動變化。
iOS 中,可以使用 KVO 或 Notification 實現。而且,GitHub 開源的 ReactiveCocoa 可以很優美的實現這種綁定。當然ReactiveCocoa還可以用在很多地方。
我會給出兩個Demo,一個是使用KVO實現的MVVM,另一個使用RAC實現的MVVM。

這些Demo都很清晰明了,這里就不貼代碼了,去Github上下載的時候記得點個贊哦!
這些Demo很能說明問題,但畢竟不是一個整體的項目、沒有展示RAC如何使用,我過段時間會使用MVVM+RAC重寫我以前上線的一個項目:玩轉西郵,到時候也會放到Github上。

簡單介紹一下RAC

ReactiveCocoa(簡稱為RAC),是由Github開源的一個應用于iOS和Mac OS開發的新框架。

ReactiveCocoa作用:
我們在iOS開發過程中,代理、KVO、點擊事件等都可以通過RAC處理。
從上面MVVM+KVO的Demo中可以看出RAC非常符合高聚合,低耦合的思想。

ReactiveCocoa的思想:
ReactiveCocoa結合了函數式編程思想和響應式編程思想,所以ReactiveCocoa被描述為函數響應式編程(FRP)框架。

函數式編程思想:是把操作盡量寫成一系列嵌套的函數或者方法調用。
響應式編程思想:如果 a = b + c ; b 或者 c 的值變化后,a 的數值會同時發生變化。
關于這兩個思想我也寫了Demo可以一并下載,關于思想的Demo參考自:http://www.jianshu.com/p/87ef6720a096中的代碼(指明出處是最起碼的尊重)。

本文所有Demo地址:https://github.com/iOSaFei/MVC-MVVM-ReactiveCocoa-

把復雜留給自己,把簡潔留給他人。

總結

以上是生活随笔為你收集整理的MVC、MVVM、RaectiveCocoa的总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。