標籤:readonly 業務 結果 nlog mic mvvm tom name person
iOS 架構模式-MVVMMVVM
Model-View-ViewModel
MVVM 其實是MVC的進化版,他將商務邏輯從VC中解耦到ViewModel,實現VC的瘦身。
做一個簡單的登入判斷:
建立LoginViewModel(邏輯處理),LoginModel(只放資料),LoginViewController。 這裡不用LoginView是為了能更好的把精力集中在用ViewModel解耦上。
在LoginModel中加入方法
//.h- (instancetype)initWithUserName:(NSString *)username password:(NSString *)password;@property (nonatomic,copy,readonly)NSString * username;@property (nonatomic,copy,readonly)NSString * password;
//.m- (instancetype)initWithUserName:(NSString *)username password:(NSString *)password { if (self = [super init]) { _username = username; _password = password; } return self;}
在LoginViewModel中加入方法
//.h
import "PersonModel.h"- (instancetype)initWithPerson:(PersonModel *)person;@property (nonatomic,assign,readonly)BOOL canLogin;
//.m
- (instancetype)initWithPerson:(PersonModel *)person {
if (self = [super init]) { //在這做你綁定model後的處理 _canLogin = [self valiCanLoginWithUserName:person.username password:person.password]; } return self;}- (BOOL)valiCanLoginWithUserName:(NSString *)username password:(NSString *)password { if (username.length & password.length) { return YES; } else { return NO; }}
然後VC(或者View)就可以直接這樣獲得判斷後的結果
PersonModel * person = [[PersonModel alloc]initWithUserName:@"10" password:@"10"];PersonViewModel * viewModel = [[PersonViewModel alloc]initWithPerson:person];NSLog(@"%d",viewModel.canLogin);
簡單的功能的時候沒什麼,當你處理複雜的邏輯判斷的時候,MVVM會有巨大優勢。
iOS 架構模式