针对MVC和MVVM这两种构建模式,网上随便一百度就是一大堆针对这两种构建模式的解说,总结起来无非以下两点:
- MVC(Model View Controller)是一种成熟的,苹果推荐的一个用来组织代码的权威范式,日常用的最多的一种构建模式,缺点就是viewController里面代码量厚重,耦合性强;
- MVVM(Model View View-Mode)是MVC衍生出来一种维护性较强、耦合性低的新的架构,它正式规范了视图和控制器紧耦合的性质,并引入新的组件,分离了视图(View)和模型(Model), 用户输入验证逻辑,视图显示逻辑,发起网络请求等代码的都放在viewModel中处理,从而大大的减少了viewController的代码量。
如果想深入了解他们的区别,就请移步自行Google吧,这里就不赘述了。对于这些东西,只有自己写过了,才能慢慢的从中体会到他们的差别,至于哪个好哪个适合自己,就只能自己从中取舍了。
下面讲述的是一个结合了三方ReactiveObjC
,采用MVVM的构建模式结合RAC写了一个登录的小功能,从demo中,能够很清楚的看到,viewController中的代码量大大的减少了,至少达到了V瘦身的效果��。
首先要pod ReactiveObjC到项目当中
先来看view,里面处理简单的页面布局和一些判断
DCLoginView.h
@property (strong, nonatomic)UITextField *usernameTextField;//用户名
@property (strong, nonatomic)UITextField *passwordTxtField;、、密码
@property (strong, nonatomic)UIButton *signInButton;//登陆按钮
@property (strong, nonatomic)UIButton *signUpButton;//注册按钮
@property(nonatomic,assign)BOOL isValidate;//判断用户名和密码是否为空
DCLoginView.m
-(instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setUpLoginView];
}
return self;
}
-(void)setUpLoginView
{
//用户名
_usernameTextField = [[UITextField alloc]init];
_usernameTextField.placeholder = @"用户名";
_usernameTextField.textColor = [UIColor blackColor];
_usernameTextField.font = [UIFont systemFontOfSize:15];
_usernameTextField.backgroundColor = [UIColor lightGrayColor];
_usernameTextField.layer.borderColor = [UIColor lightGrayColor]