參考:
一、mvvm 分為3個模組 1.view 2.viewmodel 3.model
關係為:
二、mvvm出現的原因:
傳統mvc模式中controller中做了太多的資料加工的事情,隨著軟體規模的增長,越來越不好維護。越來越不好測試。所以mvvm把資料加工的任務從controller中解放了出來。使得controller只需專注於資料調配的工作。viewmodel則去負責資料加工並通過通知機制讓view響應viewmodel的改變。(注意這裡的view指的是viewcontroller)
三、view 和 viewmodel的互動
重點講解:view和viewmodel的互動(核心)
首先要明確的一點是viewmodel的職能:網路請求、網路請求後資料的處理以及資料模型的轉換、資料庫操作、頁面跳轉邏輯、以及相關的資料處理等。
示例:1.定義乙個viewmodel的父類。用來處理所以viewmodel公共的部分
#import @inte***ce viewmodelclass : nsobject
@property (strong, nonatomic) returnvalueblock returnblock;
@property (strong, nonatomic) errorcodeblock errorblock;
@property (strong, nonatomic) failureblock failureblock;
// 傳入互動的block塊
-(void) setblockwithreturnblock: (returnvalueblock) returnblock
witherrorblock: (errorcodeblock) errorblock
withfailureblock: (failureblock) failureblock;
@end
#import "viewmodelclass.h"
@implementation viewmodelclass
#pragma 接收穿過來的block
-(void) setblockwithreturnblock: (returnvalueblock) returnblock
witherrorblock: (errorcodeblock) errorblock
withfailureblock: (failureblock) failureblock
@end
2.定義乙個weiboviewmodel的子類
#import "viewmodelclass.h"
#import "publicmodel.h"
@inte***ce weiboviewmodel : viewmodelclass
//獲取微博列表
-(void) fetchpublicweibo;
//跳轉到微博詳情頁
-(void) weibodetailwithpublicmodel: (publicmodel *) publicmodel withviewcontroller: (uiviewcontroller *)supercontroller;
@end
#import "weiboviewmodel.h"
#import "detailviewcontroller.h"
@implementation weiboviewmodel
//獲取公共微博
-(void) fetchpublicweibo
; [netrequestclass netrequestgetwithrequesturl:requestpublicurl withparameter:parameter withreturnvaleublock:^(id returnvalue) witherrorcodeblock:^(id errorcode) withfailureblock:^];
}#pragma 獲取到正確的資料,對正確的資料進行處理
-(void)fetchvaluesuccesswithdic: (nsdictionary *) returnvalue
self.returnblock(publicmodelarray);
}#pragma 對errorcode進行處理
-(void) errorcodewithdic: (nsdictionary *) errordic
#pragma 對網路異常進行處理
-(void) netfailure
#pragma 跳轉到詳情頁面,如需網路請求的,可在此方法中新增相應的網路請求
-(void) weibodetailwithpublicmodel: (publicmodel *) publicmodel withviewcontroller:(uiviewcontroller *)supercontroller
@end
3.實現 publictableviewcontroller
#import "publictableviewcontroller.h"
#import "weiboviewmodel.h"
#import "publiccell.h"
@inte***ce publictableviewcontroller ()
@property (strong, nonatomic) nsarray *publicmodelarray;
@end
@implementation publictableviewcontroller
- (void)viewdidload witherrorblock:^(id errorcode) withfailureblock:^];
[publicviewmodel fetchpublicweibo];
[svprogresshud showwithstatus:@"正在獲取使用者資訊" masktype:svprogresshudmasktypeblack];
}#pragma mark - table view data source
- (nsinteger)numberofsectionsintableview:(uitableview *)tableview
- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section
- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath
-(void)tableview:(uitableview *)tableview didselectrowatindexpath:(nsindexpath *)indexpath
@end
以上例項雖然不全但是可以加深對於mvvm的理解。僅僅入門而已。
目前reactivecocoa+mvvm是比較流行的,有時間的同學可以深入研究。
對於mvvm的理解
mvvm 是 model view viewmodel 的縮寫。model代表資料模型,也可以在model中定義資料修改和操作的業務邏輯。view 代表ui 元件,它負責將資料模型轉化成ui 展現出來。viewmodel 監聽模型資料的改變和控制檢視行為 處理使用者互動,簡單理解就是乙個同步view...
MVVM的再次理解
mvvm的理解 mvvm model view viewmodel 我要著重介紹的是viewmodel,從字面意思就能看出viewmodel是view層的model,也就是說viewmodel就是view的邏輯層。viewmodel就是為了儲存view的相關狀態 行為,而不僅僅是view繫結的一些字...
MVVM模式的理解
mvvm全稱model view viewmodel是基於mvc和mvp體系結構模式的改進,mvvm就是mvc模式中的view的狀態和行為抽象化,將檢視ui和業務邏輯分開,更清楚地將使用者介面ui的開發與應用程式中業務邏輯和行為的開發區分開來。mvvm模式簡化了介面與業務的依賴,有助於將圖形使用者介...