對於MVVM的理解

2021-07-25 20:46:34 字數 3753 閱讀 8194

參考:

一、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模式簡化了介面與業務的依賴,有助於將圖形使用者介...