减少比例= (360(原来的行数)-159(瘦身后的行数))/360 = 56%
父类 MVC 和MVVM 前后基本不动
父类主要完成如下三个功能:
- 1)功能:MJRefrsh +上拉下拉没有更多数据,封装到父类的控制器 子类调用3行代码增加所有刷新功能
- 2)网络失败:显示网络错误的链接,写在父类子类调用一行代码就可
- 3)加载数据完成,列表中没有数据提示View,比如购买界面,没有购 买记录,写在父类子类一行代码调用
瘦身思路(总的代码量增加了30多行,但是控制器更清爽了)
- 网络前网络请求函数是这样的
瘦身结果
瘦身具体实现
1)网络请求移到ViewModel
以前网络代码直接写在控制器中,如下所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
- (void)loadDataForCaseDeatailMsg:(NSString*)caseManageId{ NSMutableDictionary *dict = createMutDict; [dict setObject:@"case-info" forKey:@"method"]; [dict setObject:caseManageId forKey:@"caseManageId"]; [QTFHttpTool requestPara:dict needHud:YES hudView:self.view loadingHudText:nil errorHudText:nil sucess:^(NSDictionary *json) { BOOL success = (BOOL)[json[@"success"] boolValue]; if(success){ QTCaseDetailModel *caseDetailModel = [[QTCaseDetailModel alloc]init]; caseDetailModel.expertId = json[@"expertId"]; caseDetailModel.userName = json[@"userName"]; caseDetailModel.data = [QTCaseDetailMsgModel objectArrayWithKeyValuesArray:json[@"data"]]; [self gotoChatViewController:caseDetailModel]; } }failur:^(NSError *error) { }]; } |
- MVVM封装后控制器中的网络请求是这样的,控制器只取需要的东西,如下所示,不关心一些无关的细节,细节移到ViewModel中,5行搞定了网络请求获取网络数据,还算精简吧!
1 2 3 4 5 |
- (void)loadDataForCaseDeatailMsg:(NSString*)caseManageId{ [QTCaseDetailViewModel caseDetailhudView:self.view caseManageId:caseManageId getDataSuccess:^(id item, NSInteger totalPage) { [self gotoChatViewController:item]; } getDataFailure:^(NSError *error) {}]; } |
— 具体实现在viewModle中,viewModel添加hud,完成字典转模型,对后台做错误处理,显示错误(部分工作在我自己封装的底层网络请求实现的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
+ (void)caseDetailhudView:(UIView*)hudView caseManageId:(NSString*)caseManageId getDataSuccess:(GetDataAllSuccessBlock)success getDataFailure:(GetDataFailureBlock)failure{ NSMutableDictionary *dict = createMutDict; [dict setObject:@"case-info" forKey:@"method"]; [dict setObject:caseManageId forKey:@"caseManageId"]; [QTFHttpTool requestPara:dict needHud:YES hudView:hudView loadingHudText:nil errorHudText:nil sucess:^(NSDictionary *json) { BOOL success1 = (BOOL)[json[@"success"] boolValue]; if(success1){ QTCaseDetailModel *caseDetailModel = [[QTCaseDetailModel alloc]init]; caseDetailModel.expertId = json[@"expertId"]; caseDetailModel.userName = json[@"userName"]; caseDetailModel.data = [QTCaseDetailMsgModel objectArrayWithKeyValuesArray:json caseDetailModel.data = [QTCaseDetailMsgModel objectArrayWithKeyValuesArray:json用一行代码就可
瘦身思路(总的代码量增加了30多行,但是控制器更清爽了)
瘦身结果瘦身具体实现1)网络请求移到ViewModel以前网络代码直接写在控制器中,如下所示
— 具体实现在viewModle中,viewModel添加hud,完成字典转模型,对后台做错误处理,显示错误(部分工作在我自己封装的底层网络请求实现的)
|