MVVM即Model-View-ViewModel的简写。即模型-视图-视图模型。
模型(Model)指的是后端传递的数据。
视图(View)指的是所看到的页面。
视图模型(ViewModel)是mvvm模式的核心,它是连接view和model的桥梁。
它有两个方向:
一是将视图(View)转化成模型(Model),即将所看到的页面转化成后端的数据。实现的方式是:View事件监听把具体参数更新到一个整体模型中并通过rac传递给ViewMode,实现View和ViewModel共享一个整体数据对象,来达到数据绑定,然后ViewModel向后端请求数据。
二是将模型(Model)转化成视图(View),即将后端传递的数据转化成所看到的页面。实现的方式是:对象解析和通过请求响应来触发更新UI。这两个方向都实现的,我们称之为数据的双向绑定。
MVC是Model-View- Controller的简写。即模型-视图-控制器。
M和V指的意思和MVVM中的M和V意思一样。
C即Controller指的是页面业务逻辑。
使用MVC的目的就是将M和V的代码分离。
MVC是单向通信。也就是View跟Model,必须通过Controller来承上启下。
MVC和MVVM的区别并不是VM完全取代了C,只
是在MVC的基础上增加了一层VM,弱化了C的概念,ViewModel存在目的在于抽离Controller中展示的业务逻辑,而不是替代Controller,其它视图操作业务(如常用的表格和不同视图的交互)等还是应该放在Controller中实现。也就是说MVVM实现的是业务逻辑组件的重用,
使开发更高效,结构更清晰,增加代码的复用性。
下面是我们的MVVM实现:
苹果MVVM架构:
1.页面(基于PPRootViewController的页面,PPRootViewController是UIViewController的子类,PPRootViewController封装了失败UI和无数据UI。包含系统控件)
2.UI控件View(添加的显示元素,包含系统控件或其它View,一般通过setModel来直接展示数据,也可根据数据来实现部分页面逻辑);
3.ViewModel(请求参数校验,业务相关响应参数的对象转换,数据处理和部分业务逻辑);
4.中间件(类似后台网关的组件,处理参数统一添加,消息头填充,可配置的显示和取消蒙层,可配置的错误弹窗显示,token失效跳转登录页面,添加签名,区分get请求和post请求,网络请求地址和参数拼接,响应消息解密与封装成成功处理和失败处理);
5.网络请求组件(AFNetworking,处理和后台交互,超时处理,无网络处理)
一个请求相关流程:1->2>3->4->5或2->3->4->5
是否MVVM架构主要看是是否抽象出ViewModel,和是否使用网络中间间无关,也不是看是否使用Reactive。我目前看到的MVVM都是用Reactive(RAC),不知道是否有其它不使用Reactive(RAC)实现了MVVM,理论是可以的。我也见过使用Reactive(RAC)不是采用MVVM的项目。一般拆分的越细开发越慢,它的好处不是提升了开发速度,而是提高了代码的清晰性,更便于维护,更方便实现ViewModel,View,Controller的文件大小,不至于他们逻辑过于复杂和庞大。