ReactiveViewModel 0.3

ReactiveViewModel 0.3

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后一次发布2014年12月

Tony Arnold 维护。



  • 作者:
  • Alan Rogers,Just Spahr-Summers和Josh Abernathy

ReactiveViewModel是一个用于构建使用模型-视图-视图模型(MVVM)和ReactiveCocoa的Cocoa应用的代码/文档组合项目。

通过解释原理、记录最佳实践、提供可重用库组件,我们希望使Objective-C中的MVVM更加吸引人和易于使用。

模型-视图-视图模型(MVVM)

大多数Cocoa开发者熟悉模型-视图-控制器(MVC)模式。

Model-View-Controller

模型-视图-视图模型(MVVM)是GUI应用的另一种架构范式。

Model-View-ViewModel

尽管它似乎与MVC类似(除了用“视图模型”对象代替控制器外),但有一个主要区别——视图拥有视图模型。与控制器不同,视图模型不知道使用它的特定视图。

这种看似微小的变化提供了巨大的好处

  1. 视图模型是可测试的。由于它们不需要视图来完成工作,所以可以不进行任何UI自动化或存根来测试展示行为。
  2. 视图模型可以像模型一样使用。如果需要,视图模型可以像领域模型一样复制或序列化。这可以用于快速实现UI恢复等功能。
  3. 视图模型(主要是)平台无关的。由于实际的UI代码生活在视图中,设计良好的视图模型可以在iPhone、iPad和Mac上使用,只需对每个平台进行少量的调整。
  4. 视图和视图控制器更简单。一旦将重要逻辑转移到其他地方,视图和VC成为无脑UI对象。这使得它们更容易理解和重新设计。

简而言之,用MVVM替换MVC可以导致更灵活和更严谨的UI代码。

视图模型包含什么?

视图模型就像模型的适配器,使其适合展示。展示行为也放在视图模型中。

例如,视图模型可能处理:

  • 启动网络或数据库请求
  • 确定何时隐藏或显示信息
  • 日期和数字格式化
  • 本地化

然而,视图模型并不负责实际呈现信息或处理输入 —— 这完全是视图层的职责。当视图模型需要与视图通信时,它通过数据绑定系统来实现。

关于视图控制器呢?

OS X和iOS都有视图(或窗口)控制器,一开始可能会觉得有点混淆,因为MVVM只是指一个视图。

但经过仔细观察,我们会发现视图控制器实际上是视图层的组成部分,因为它们负责像以下这些东西:

  • 布局
  • 动画
  • 设备旋转
  • 视图和窗口过渡
  • 展示加载的UI

因此,“视图”实际上是指视图,这其中包括视图控制器。对于屏幕的同一部分,没有必要同时有一个视图和视图控制器 —— 只需根据使用情况选择更合适的类即可。

无论您选择使用视图还是视图控制器,您仍然需要有一个视图模型。

ReactiveCocoa

MVVM在与功能强大的数据绑定系统中表现得最为成功。ReactiveCocoa就是这样一个系统。

通过将变化建模为信号,视图模型可以与视图通信,而无需实际知道其存在(对于模型到视图模型的通信也是如此)。这种解耦使得视图模型在没有视图的情况下也能进行测试 —— 测试只需连接到VM的信号并验证行为是否正确即可。

ReactiveCocoa还包括对MVVM非常有益的其他方便功能,如命令以及内置的AppKit和UIKit绑定。

开始使用

要独立构建ReactiveViewModel,请打开ReactiveViewModel.xcworkspace。要将其集成到您的项目中,请包含ReactiveViewModel.xcodeprojReactiveCocoa.xcodeproj,并将您的目标链接到ReactiveViewModel和ReactiveCocoa的目标。

更多信息

模型-视图-视图模型最初由Microsoft开发,因此很多例子都是针对WPF或Silverlight的,但也有一些资源可能会有用。

博客文章

展示