一、概述

在 iOS 开发中,MVC(Model View Controller)是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式。Apple甚至是这么说的。在MVC下,所有的对象被归类为一个Model,一个View,和一个Controller。Model持有数据,View显示与用户交互的界面,而ViewController调解Model和View之间的交互。
但使用MVC不可避免的会遇到几个问题:
1.厚重的ViewController
2.遗失的网络逻辑(无立足之地)
3.较差的可测试性

为了避免和解决上述问题的产生,从MVC引申出来一种维护性较强、耦合性低的新的架构MVVM(Model View View-Mode),MVVM正式规范了视图和控制器紧耦合的性质,并引入新的组件。MVVM主要目的是为了分离视图(View)和模型(Model)。

二、MVC

在这里插入图片描述

Controller 是 MVC 中的 C,指控制层,在 Controller 层会接收用户所有的操作,并根据写好的代码进行相应的操作——触发 Model 层,或者触发 View 层,或是两者都触发。
注意:Controller 层触发 View 层时,并不会更新 View 层中的数据,View 层中的数据是通过监听 Model 层数据变化而自动更新的,与 Controller 层无关。

在这里插入图片描述
从图中可以看出,MVC 框架主要有两个缺点:
1.厚重的ViewController。MVC 框架的大部分逻辑都集中在 Controller 层,代码量也都集中在 Controller 层,这带给 Controller 层很大的压力,而已经有独立处理事件能力的 View 层却没有用到。
2.Controller 层和 View 层之间是一一对应的,断绝了 View 层复用的可能,因而产生了很多冗余代码。

三、MVVM

在这里插入图片描述

原理:
MVVM即model-view-viewModel的缩写,model是数据模型,vue是页面,vueModel也就是MVC的Controller演变而来的,vueModel作为model和vue之间的桥梁,数据会绑定到viewModel层并自动渲染到页面,视图变化的时候会通知viewModel层更新数据

至于双向数据绑定,可以这样理解:双向数据绑定是一个模板引擎,它会根据数据的变化实时渲染。这种说法可能不是很恰当,但是很好理解,如下图所示:View 层和 Model 层之间的修改都会同步到对方。
在这里插入图片描述
MVVM 的使用建议

MVVM 可以兼容你当下使用的MVC架构。
MVVM 增加你的应用的可测试性。
viewController 尽量不涉及业务逻辑,让 viewModel 去做这些事情。
viewController 只是一个中间人,接收 view 的事件、调用 viewModel 的方法、响应 viewModel 的变化。
viewModel 绝对不能包含视图 view,不然就跟 view 产生了耦合,不方便复用和测试。
viewModel之间可以有依赖。
viewModel避免过于臃肿,否则重蹈Controller的覆辙,变得难以维护。

MVVM的优势

低耦合:View 可以独立于Model变化和修改,一个 viewModel 可以绑定到不同的 View 上
可重用性:可以把一些视图逻辑放在一个 viewModel里面,让很多 view 重用这段视图逻辑
独立开发:开发人员可以专注于业务逻辑和数据的开发 viewModel,设计人员可以专注于页面设计
可测试:通常界面是比较难于测试的,而 MVVM 模式可以针对 viewModel来进行测试
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐