zoukankan      html  css  js  c++  java
  • iOS-MVVM设计模式

    谈到MVVM不得不先说一下MVC,MVC(Model-View-Controller)。

    Model模型:用来呈现数据。

    View视图:用来呈现用户界面。

    Controller控制器:用来调节模型与视图之间的交互。

    在 iOS 应用中日益增长的重量级视图控制器的问题。在典型的 MVC 应用里, 许多逻辑被放在 View Controller 里。

    它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic),为了不让控制器日益增大,便于测试管理,便出现了MVVM。

    MVVM:它其实是一个 MVC 的增强版,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。

    在 iOS 上使用 MVVM 的动机,就是让它能减少 View Controller 的复杂性并使得表示逻辑更易于测试。

    ViewModel: 它位于 View/Controller 与 Model 之间。

    代码示例:

    1、首先是model层的代码,基于JSONModel封装了BaseModel类(基类:以后的Model都可继承此类),继承自BaseModel,实现HomeModel类。

    2、然后是View层的代码,View层控件全部用懒加载方式,尽可能减少内存消耗,不喜欢用XIB,所以习惯纯代码编写。

    3、接下来看ViewModel层,对封装好的NetWork进行处理,request网络数据存储在HomeModel里,最后将数据用Block带出去,方便在VC中使用数据,reloadData。

    4、最终,HomeViewController 将会变得非常轻量级:

    怎么样?其实 MVVM 并没有想像中的那么难吧,而且更重要的是它也没有破坏 MVC 的现有结构,只不过是移动了一些代码,仅此而已。总结下 MVVM 相比 MVC 到底有哪些好处呢?

    主要可以归纳为以下三点:

    1、由于展示逻辑被抽取到了 viewModel 中,所以 view 中的代码将会变得非常轻量级;

    2、由于 viewModel 中的代码是与 UI 无关的,所以它具有良好的可测试性;

    3、对于一个封装了大量业务逻辑的 model 来说,改变它可能会比较困难,并且存在一定的风险。在这种场景下,viewModel 可以作为 model 的适配器使用,从而避免对 model 进行较大的改动。

    通过前面的示例,我们对第一点已经有了一定的感触,至于第三点,可能对于一个复杂的大型应用来说,才会比较明显。

    综上所述,我们只要将 MVC 中的 controller 中的展示逻辑抽取出来,放置到 viewModel 中,然后通过一定的技术手段,来同步 view 和 viewModel ,就完成了 MVC 到 MVVM 的转变。

  • 相关阅读:
    Djnago中缓存配置(redis配置案例)
    HDU-4717 The Moving Points 三分
    HDU-4716 A Computer Graphics Problem 水题
    HDU-2686 Matrix 多进程DP
    [转]手动开平方的简易方法
    [转]树链剖分
    HUOJ-10857 最大的面积 凸包+DP
    Bnuoj-29359 Deal with numbers 线段树
    HDU-4283 You Are the One 区间DP
    BNUOJ-26586 Simon the Spider 最小生成树+枚举
  • 原文地址:https://www.cnblogs.com/fengmin/p/5453829.html
Copyright © 2011-2022 走看看