使用MVVM使UITableView和UICollectionView更轻便

有时,同时使用UITableView和UICollectionView会导致膨胀的视图甚至是控制器。 当我们需要动态更改数据类型时,事情变得更加复杂。 可以说我们有如下两个部分:

在屏幕下方,有两个单独的部分,这意味着我们需要两个单独的模型,并且这两个模型是一致配置的。 如果选择“订单”,则必须使用“订单”模型在表格视图中准备单元格。 相反,当我选择“已完成订单”时,我还必须在表格视图中准备带有相关模型的单元格。

对于这种情况,我创建了两个不同的模型,第一个模型用于活动订单,第二个模型用于完成的订单,例如 对于这种情况,分离数据源会更加有益。 我们不应该将数据源文件重新使用到同一应用程序中。 相反,我们应该按表和集合视图创建数据源。 这样,我们可以测试我们的视图模型,模型甚至数据源!

为了使我们的模型不可变,我使用struct而不是class。

我的ViewModels现在有非常简单的工作。

我们的数据源仅实现UITableViewDataSource或UICollectionViewDataSource

最后,我们的视图控制器只做一件事; 在视图和视图模型之间进行调解! 通常,我们应该保持视图控制器的亮度。 这样,如果我们可以对视图模型进行单元测试,则可以增加我们的测试覆盖率和应用程序关联性,并执行一点SRP(单一责任原则)规则。

如您所见,我的视图控制器仅执行与视图相关的工作。 就像将我的数据源类绑定到表视图中一样。

当采用这种方法使red-green-refactor标准变薄时,我们可以测试几乎所有的业务逻辑。 我们可以像我之前说过的那样测试模型,查看模型甚至数据源。