什么是正确的 MVVM 模式

  iOS 中 MVC 模式是比较常见的,其实 iOS 中的 MVC 大多被人认为是普通意义上的 MVP 模式。
  最新流行的是 MVVM 模式。MVVM 模式设立的初衷大概是为了使得 UI 逻辑可测吧。上图:
MVVM图
  View 和 View Controller 可以整体看成是 View 层。
  实线代表持有,通过直接引用的方式操作。
  虚线表示需要通过其他模式告知,例如 target-action、通知、KVO 等等。

  新出现的 ViewModel 层是对接 View 层的静态变量和动态响应的;
  View 静态变量的使用举例:View 上的 userName 是由 Model 的几个属性拼凑而成,我们在 ViewModel 里持有 Model 写拼凑逻辑,在 ViewController 里持有 View 后直接调用 ViewModel 里的拼凑逻辑或拼凑的结果赋值给 View 的userName;如果 Model 有更新,就通知 ViewModel,ViewModel 再通知 ViewController,让 ViewController 去修改 View 的相关内容。
  View 动态响应的使用举例:View 上的某个按钮的点击后通过 target-action 模式传递给 ViewController,ViewController 调用 ViewModel 的对应响应逻辑。
  如此一来,我们要对 UI 逻辑做测试就变得轻而易举,只需要对 ViewModel 写单元测试即可。
  ViewModel 放的是 UI逻辑,Model 放的是数据层的业务逻辑。

【后记】因为看到网上有很多对 MVVM 的错误解释,所以做此文。