MVC和MVVM简介

一、MVC

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写

    MVC的思想:Controller负责将Model的数据用View显示出来,也是在Controller里面把Model的数据赋值给View。

    1.M(model)

      是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。       

        比如我们人类有一双手,一双眼睛,一个脑袋,没有尾巴,这就是模型,Model定义了这个模块的数据模型。
        在代码中体现为数据管理者,Model负责对数据进行获取及存放。
        数据不可能凭空生成的,要么是从服务器上面获取到的数据,要么是本地数据库中的数据,
        也有可能是用户在UI上填写的表单即将上传到服务器上面存放,所以需要有数据来源。
        既然Model是数据管理者,则自然由它来负责获取数据。
        Controller不需要关心Model是如何拿到数据的,只管调用就行了。
        数据存放的地方是在Model,而使用数据的地方是在Controller,
        所以Model应该提供接口供controller访问其存放的数据(通常通过.h里面的只读属性)

    2.V(view)

      应用程序中处理数据显示的部分。通常视图是依据模型数据创建的

        View,视图,简单来说,就是我们在界面上看见的一切。
        它们有一部分是我们UI定死的,也就是不会根据数据来更新显示的,比如一些Logo图片啊,这里有个按钮啊,那里有个输入框啊,一些显示特定内容label啊等等;
        有一部分是会根据数据来显示内容的,比如tableView来显示好友列表啊,这个tableView的显示内容肯定是根据数据来显示的。
        我们使用MVC解决问题的时候,通常是解决这些根据数据来显示内容的视图。

    3.C(Controller)

      应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

        Controller是MVC中的数据和视图的协调者,也就是在Controller里面把Model的数据赋值给View来显示(或者是View接收用户输入的数据然后由Controller把这些数据传给Model来保存到本地或者上传到服务器)。

    综上:

      所有的App都是界面和数据的交互,所以需要类来进行界面的绘制,于是出现了View,需要类来管理数据于是出现了Model。我们设计的View应该能显示任意的内容比如UILabel显示的文字应该是任意的而不只是某个特定Model的内容,所以我们不应该在View的实现中去写和Model相关的任何代码,如果这样做了,那么View的可扩展性就相当低了。而Model只是负责处理数据的,它根本不知道数据到时候会拿去干啥,可能拿去作为算法噼里啪啦去了,可能拿去显示给用户了,它既然无法接收用户的交互,它就不应该去管和视图相关的任何信息,所以Model中不应该写任何View相关代码。然而我们的数据和界面应该同步,也就是一定要有个地方要把Model的数据赋值给View,而Model内部和View的内部都不可能去写这样的代码,所以只能新创造一个类出来了,取名为Controller。

二、MVVM

    MVVM:Model、View、ViewModel。

      ViewModel(VM,不是显存)。
      VM的意义,和Model一样,在于数据。
      Model负责对数据进行取和存,然而我们对数据的操作除了取和存以外,还有一个非常重要的操作:解析。

    MVVM为什么会出现
      1、Controller的存在感被完全的降低了;

      2、VM的出现就是Controller存在感降低的原因。

    理解C、VM、M之间的关系:

      因为Controller只需要数据解析的结果而不关心过程,所以就相当于VM把“如何解析Model”给封装起来了,C甚至根本就不需要知道M的存在就能把工作做好,前提它需要持有一个VM。那么我们MVVM中的持有关系就是:C持有VM,VM持有M。

三、理解:

    MVC和MVVM的区别并不是VM完全取代了C,只是在MVC的基础上增加了一层VM,只不过是弱化了C的概念

    ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务等还是应该放在Controller中实现。

    也就是说MVVM实现的是业务逻辑组件的重用,使开发更高效,结构更清晰,增加代码的复用性。

原文地址:https://www.cnblogs.com/yxkNotes/p/12713572.html