RxSwift + MVVM:如何提供ViewModels

介绍

自从我们开始在BlaBlaCar的Model-View-ViewModel(MVVM)架构中使用RxSwift以来,已经快一年了。 我们对结果感到兴奋。 我们用这种方法编写的代码更容易理解,维护,测试和扩展。 但是,最初的几周并不是小菜一碟:我们必须在MVVM + RxSwift架构的某些方面进行迭代,以使事情变得正确。 其中之一是将输入提供给ViewModel的方式。

让我们通过两种不同的方法向ViewModels提供输入(Rx事件)。

但是首先,让我们快速讨论一下ViewModels。

视图模型

ViewModel的公共合同非常重要。 您必须做到正确(出于多个原因):

  • 它应该可插在任何View上,即,不是通过View的构建方式来定义ViewModel的公共合同。 提醒一下,拥有ViewModel的是View。 换句话说,View知道ViewModel,而不是相反。
  • 它应该是可测试的。 最后,MVVM体系结构的最大好处之一就是使业务逻辑可测试。
  • MVVM具有绑定机制,因此让我们在RxSwift中加以利用。

设计ViewModel合同时的经验法则是,始终尝试将ViewModel视为一个简单的黑匣子,该黑匣子接受输入以产生输出。

说到Rx,这意味着ViewModel消耗了一些Streams的事件(输入)(大部分时间由View提供)来计算输出Streams(用于View)。

从那里,可以编写一个简单的协议来表示任何ViewModel应该具有输入和输出。

接下来,该协议有2种不同的实现,每种都有各自的优缺点。

Interesting Posts