MVVM、MVC、发布订阅

最常见的客户端架构有三种:

  • MVC: Model-View-Controller
  • MVP: Model-View-Presenter
  • MVVM: Model-View-ViewModel

MVC:

Model View Controller 模型-视图-控制器简单来说就是通过controller的控制去操作model层的数据,并且返回给view层展示。也可以理解成Massive View Controller(重量级视图控制器)

MVC的缺点:

视图对象通常在一个MVC应用程序中和模型对象是低耦合的,它们之间的通信都是通过控制器对象来完成的,这中间还有很多琐碎的事情,例如从网络或者数据库等获取原始数据,以及将原始的Model数据转换成View可以直接用的数据模型,比如说时间是一个长整型的数字,要转换成2016-08-26 12:12:12这样的格式化的字符串等一系列逻辑处理,数据模型变化时更新数据库等。控制器做了太多的工作,导致有时候我们的一个控制器类特别的大,因此就有了MVVM。

MVVM:

MVVM模式是Model-View-ViewMode模式的简称。

由视图(View)、视图模型(ViewModel)、模型(Model)三部分组成,

通过这三部分实现UI逻辑、呈现逻辑和状态控制、数据与业务逻辑的分离。

Model-View-ViewModel 

Model:同MVC的模型对象

View:同MVC的视图对象

ViewModel:(持有Model对象,并且不对外暴露)它的一个作用就是作为一个表现视图显示自身所需数据的静态模型;但它也有收集, 解释和转换那些数据的功能.例如刚才说的将Model数据转换成View可以直接用的数据模型, 这留给了 view (controller) 一个更加清晰明确的任务: 呈现由 view-model 提供的数据。现在视图控制器仅关注于用 view-model 的数据配置和管理各种各样的视图,view-model 会在视图控制器上以一个属性的方式存在. 视图控制器知道 view-model 和它的公有属性, 但是 view-model 对视图控制器一无所知.



2.各层的职责:

model应用于封装程序的业务逻辑相关的数据以及对数据的处理方法。它具有对数据的直接访问的权利

例如:对数据库的访问,model不依赖于viewmodel,也就是说,model不关心会被如何显示或是如何被操作

也不包括任何用户使用的与界面相关的逻辑。

View层依赖于ViewMode层,根据定义好的结构去显示数据,构建页面即可。

viewmodel是model层和view层的桥梁,也就是所谓的协议,有了协议,model层和view层

可以各干各的事情,

而不用担心不必要的变动

MVVM的优点:

1.兼容MVC

    MVVM是MVC的一个升级版,目前的MVC也可以很快的转换到MVVM这个模式。VC可以省去一大部分展示逻辑。

2.可测试性

    在MVC下,Controller基本是无法测试的。有了MVVM我们就可以测试里面的viewModel,来验证我们的处理结果对不对

3.代码可读性,减少代码复杂性


MVVM的缺点:

  • 类会增多

    每个VC都附带一个viewModel,类的数量*2

  • viewModel会越来越庞大

    我们把逻辑给了viewModel,那势必Model也会变得很复杂,里面的属性和方法越来越多。可能重写的方法比较多,因为涉及到一些数据的转换以及和controller之间的通信。

  • 调用复杂度增加

    由于数据都是从viewModel来,想想突然来了一个新人,一看代码,不知道真实的模型是谁。比如常用tableview的数据源,一般都是一个数组,如果不断的通过viewModel去取,沟通上没有那么直接。况且每封一层,意味着要写很多代码去融合他们的转换。


发布订阅:

一、什么是发布——订阅模式

也叫作观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知

比如有个界面是实时显示天气,它就订阅天气事件(注册到调度中心,包括处理程序),当天气变化时(定时获取数据),就作为发布者发布天气信息到调度中心,调度中心就调度订阅者的天气处理程序。

二、发布——订阅模式的作用

    1、用于异步编程,取代传递回调函数的方案

    2、让两个对象松耦合地联系在一起,一个对象不再显式地调用另一个对象的接口

三、如何实现

    1、三要素

        发布者;

        缓存列表;

        订阅者的回调;

观察者模式:

虽然两种模式都存在订阅者和发布者(具体观察者可认为是订阅者、具体目标可认为是发布者),但是观察者模式是由具体目标调度的,而发布/订阅模式是统一由调度中心调的,所以观察者模式的订阅者与发布者之间是存在依赖的,而发布/订阅模式则不会。








猜你喜欢

转载自blog.csdn.net/weixin_41143293/article/details/79596237