ReactiveViewModel是一个用于构建使用模型-视图-视图模型(MVVM)和ReactiveCocoa的Cocoa应用的代码/文档组合项目。
通过解释原理、记录最佳实践、提供可重用库组件,我们希望使Objective-C中的MVVM更加吸引人和易于使用。
大多数Cocoa开发者熟悉模型-视图-控制器(MVC)模式。
模型-视图-视图模型(MVVM)是GUI应用的另一种架构范式。
尽管它似乎与MVC类似(除了用“视图模型”对象代替控制器外),但有一个主要区别——视图拥有视图模型。与控制器不同,视图模型不知道使用它的特定视图。
这种看似微小的变化提供了巨大的好处
简而言之,用MVVM替换MVC可以导致更灵活和更严谨的UI代码。
视图模型就像模型的适配器,使其适合展示。展示行为也放在视图模型中。
例如,视图模型可能处理:
然而,视图模型并不负责实际呈现信息或处理输入 —— 这完全是视图层的职责。当视图模型需要与视图通信时,它通过数据绑定系统来实现。
OS X和iOS都有视图(或窗口)控制器,一开始可能会觉得有点混淆,因为MVVM只是指一个视图。
但经过仔细观察,我们会发现视图控制器实际上是视图层的组成部分,因为它们负责像以下这些东西:
因此,“视图”实际上是指视图层,这其中包括视图控制器。对于屏幕的同一部分,没有必要同时有一个视图和视图控制器 —— 只需根据使用情况选择更合适的类即可。
无论您选择使用视图还是视图控制器,您仍然需要有一个视图模型。
MVVM在与功能强大的数据绑定系统中表现得最为成功。ReactiveCocoa就是这样一个系统。
通过将变化建模为信号,视图模型可以与视图通信,而无需实际知道其存在(对于模型到视图模型的通信也是如此)。这种解耦使得视图模型在没有视图的情况下也能进行测试 —— 测试只需连接到VM的信号并验证行为是否正确即可。
ReactiveCocoa还包括对MVVM非常有益的其他方便功能,如命令以及内置的AppKit和UIKit绑定。
要独立构建ReactiveViewModel,请打开ReactiveViewModel.xcworkspace
。要将其集成到您的项目中,请包含ReactiveViewModel.xcodeproj
和ReactiveCocoa.xcodeproj
,并将您的目标链接到ReactiveViewModel和ReactiveCocoa的目标。
模型-视图-视图模型最初由Microsoft开发,因此很多例子都是针对WPF或Silverlight的,但也有一些资源可能会有用。
博客文章
展示