美文网首页
iOS 简单的MVVM框架

iOS 简单的MVVM框架

作者: Kenter_Huang | 来源:发表于2016-11-24 11:48 被阅读117次

说到iOS的框架,可能很多人都在使用MVC,Model-View-Controller,这种模式下对于业务的处理就会全部集中到控制器里面去处理,在稍微复杂的页面中,Controller会变得非常的臃肿,难以测试,当然对于后期的维护来说也是一种灾难。MVVM是一种Model-View-ViewModel的模式,是基于MVC的一种框架,因此它是兼容MVC的。同时,它把对业务的处理提取出来,放到了ViewModel中来处理,因此,控制器不用管这些复杂的逻辑处理,我们只要把处理结果给Controller就可以了。

比如说,我们要从网络接口请求数据,在MVC里面,我们要在Controller里面调用网络请求类,返回数据,然后转模型,在展示数据。而在MVVM中,我们把这件事件交给ViewModel来做,只需要把序列化的数据返回给Controller,而Controller根本就不用管数据是怎么请求的,怎么序列化的,这些中间过程Controller都不用管,这样就简化Controller的工作量,模块化了功能,测试起来更加的简单和准确。 当然,MVVM也有自身的缺陷,就是会增加很多的类,尤其是对于那些简单的逻辑处理,这样封装的话反而会显得比较的拖沓。所以对于MVVM框架的使用,还是要看具体的情况来判断。

比如说我们在主页要显示一个列表,要请求数据,我只用实例化一个ViewModel,然后调用它的方法就可以了

- (void)getDataFormNetwork {
   // 从网络加载数据
   JTMainViewModel *mainViewModel = [[JTMainViewModel alloc] init];
   mainViewModel.URL = @"http://***************";
   mainViewModel.parameters = nil;
   
   [SVProgressHUD showWithStatus:@"加载中..."];
   [mainViewModel requestDataSourceWithSuccess:^(id  _Nullable responseObject) {
       [SVProgressHUD dismiss];
       
       NSArray *list = (NSArray *)responseObject;
       self.dataSource = list;
       [self.tableView reloadData];
       
       // 保存到数据库
       [self saveToDatabase:list];
   } fail:^(NSError * _Nullable error) {
       
       [SVProgressHUD dismiss];
       JTLOG(@"error = %@", error);
       [self getDataFormDatabase];
   } noNetwork:^(BOOL status) {
       if (!status) {
           [SVProgressHUD showErrorWithStatus:@"网络错误"];
           [self getDataFormDatabase];
       }
   }];
}

网络数据加载失败或者没有联网时,直接调用它对应的方法,拿到数据

// 从数据库加载数据
- (void)getDataFormDatabase {
    JTMainViewModel *mainViewModel = [[JTMainViewModel alloc] init];
    
    [mainViewModel getDatabaseWithName:@"t_main" keyword:@"*" condition:@"" complection:^(id _Nullable responesObject, NSError * _Nullable error) {
        if (!error) {
            NSArray *array = (NSArray *)responesObject;
            if (array.count > 0) {
                self.dataSource = array;
                [self.tableView reloadData];
            } else {
                JTLOG(@"数据库没有数据");
            }
        }
        else {
            JTLOG(@"查询失败");
        }
    }];
}

而控制器要做的事情就十分的简单了,只需要刷新界面,展示数据。
总结,MVVM框架是基于MVC的,所以对MVC是兼容的,理解起来也很容易。它大大的减少了控制器的工作量,模块化了功能,使我们的Controller看起来十分简洁而高效。

最后附上我Demo的地址:JTConstructForIOS

~end

相关文章

  • iOS MVVM架构总结

    参考:iOS 中MVC设计模式iOS MVVM架构iOS MVVM-框架介绍iOS 架构模式MVVM的实践总结iO...

  • iOS 简单的MVVM框架

    说到iOS的框架,可能很多人都在使用MVC,Model-View-Controller,这种模式下对于业务的处理就...

  • MVVM

    iOS MVVM+RAC 从框架到实战 【长篇高能】ReactiveCocoa 和 MVVM 入门 iOS 最全R...

  • MVVM在前端(web)使用

    前端框架vue,MVVM模式 今天咱们不谈iOS,说说web(MVVM模式)。MVVM模式在前端开发应该还是挺多的...

  • 2018-11-12

    iOS MVVM+RAC 从框架到实战 - 简书

  • iOS 设置statusBar

    一、前言 之前在《iOS MVVM+RAC 从框架到实战》中介绍了一下MVVM下的框架基类,其中的ViewCont...

  • iOS mvvm框架

    https://github.com/lovemo/MVVMFramework

  • MVVM框架 For IOS

    简介 MVC模式,稍微复杂点的页面controller会非常庞大,它可能会包含数据请求、数据加工等各种任务。MVV...

  • MVVM框架的搭建(三)——网络请求

    mvvm的网络框架的搭建 MVVM框架的搭建(一)——背景MVVM框架的搭建(二)——项目搭建MVVM框架的搭建(...

  • 2019-12-10

    iOS MVVM+RAC 从框架到实战 http://www.cocoachina.com/articles/18659

网友评论

      本文标题:iOS 简单的MVVM框架

      本文链接:https://www.haomeiwen.com/subject/cjevpttx.html