您的位置:首页 > 运维架构 > 网站架构

iOS进阶之架构设计MVVM(3)

2019-08-15 20:03 1101 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shifang07/article/details/99652409

iOS进阶之架构设计MVC(1)
iOS进阶之架构设计MVP(2)

前言:

前两篇文章已经理解MVC、MVP的设计模式。特别是MVP,比较难以理解,不好把握。需要多多实践,对比、来优化P段,找到最适合自己的写法。有了MVP的理解之后,就像走过来一段嘿嘿的山洞,一下豁然开朗。见到了世外桃源。MVVM的设计模式是结构比较清晰的。我们来看一下。

一、MVVM组成

MVVM由3部分组成:Model 、 View 、ViewModel。

  • M:Model: 作为数据的容器。
  • V:View、部分ViewController组成。负责界面的展示以及用户交互的处理。
  • VM:ViewModel: 负责业务逻辑处理。就是把原来ViewController层的业务逻辑和页面逻辑等剥离出来放到ViewModel层

二、基本要点

  • View持有ViewModel:在View中通过绑定的方式关联UI元素和ViewModel的属性,UI元素的属性变化和ViewMode的数据属性进行双向影响。

  • ViewModel持有Model:Model为ViewModel提供数据支持,同时ViewModel的数据属性变化也会影响Model上,用于数据提交等。
    Model和ViewModel的功能区别在于,ViewModel是View提供数据支持的,其结构和View保持一致。Model来源于业务处理,保持业务数据的基本关联和完整性。

  • 当Model层结束查询或者运算时将结果更新到ViewModel层,ViewModel层因为存在和View的绑定,使得UI层得到通知更新,体现了数据驱动界面的思想。

最基本的规则:

1.View持有ViewModel 反之不持有

2.ViewModel持有Model 反之不持有

MVVM 的优势

低耦合:View 可以独立于Model变化和修改,一个 viewModel 可以绑定到不同的 View 上

可重用性:可以把一些视图逻辑放在一个 viewModel里面,让很多 view 重用这段视图逻辑

独立开发:开发人员可以专注于业务逻辑和数据的开发 viewModel,设计人员可以专注于页面设计

可测试:通常界面是比较难于测试的,而 MVVM 模式可以针对 viewModel来进行测试

MVVM中View和Model的双向绑定

绑定关系的建立可以依赖第三方库,如ReactiveCoca相关的库实现绑定
自己实现View和Model的绑定。ViewModel中可以设置Delegate,block,KVO等,用来完成model到view的绑定;另外View中也可以通过ViewModel把View的改变通知到model。

感谢

移动开发架构之MVVM模式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: