0

我会尽量简短:我们启动了完整的 RxSwift 应用程序,但我们的协调员开始不堪重负地维护和扩展,所以我们正在修改它们以不使用 RxSwift,现在我们不知道如何使用它们以及在哪里使用它们保留它们。

最简单的例子:带有 1 个按钮的视图控制器、视图模型、协调器。我在哪里打电话coordinator.navigate(to: .mySection),怎么打电话?协调器是否应该保留在视图控制器中?我认为它们应该保留在视图模型中,但在视图模型中订阅不是推荐的用法。

我不想过度设计这个,但我希望得到一些有见地的帮助。

4

3 回答 3

1

我建议使用XCoordinator和他们提出的架构 MVVM-C,我已经在 2 个大型/复杂的应用程序中使用过,这很容易。

于 2019-10-03T16:07:33.597 回答
0

如果您想将协调器用作 ViewModel 的依赖项,请查看此库:Action

Action 允许您将按钮中的操作与 ViewModel 绑定。您只需在 ViewModel 中定义一个操作,并将其绑定到视图中。Action 类型只是一个允许其他序列作为输入并返回另一个序列作为输出的序列。所以你不需要在你的 ViewModel 上使用 DisposeBag。

如果您想查看示例,请查看 Action 的 GitHub 项目,或者,如果您想查看应用示例,Ray Wenderlich RxSwift书中有一个关于如何集成 MVVM 和协调器的非常简洁的示例。

于 2019-05-24T12:26:32.510 回答
0

没有一个 MVVM 元素直接解决Coordinators,因此如果您使用 Soroush 协调器模式的好处,您可能正在使用 VIPER,但您可能没有意识到这一点,这并不重要。

在 VIPER 中,R 代表Routing,它完全符合 Coordinators 的定义。

我真正喜欢建议的两件事是:

  1. 互联网上的大多数教程都教你为每个人创建一个单独的协调器,UIViewController个人对此提出了很深的问题,他回答说:这不是协调器的最佳实践。所以我在最新的应用程序中只使用了两个协调器,并且对结果非常满意。
  2. 如果你想花一些时间在 VIPER 上,我建议假设你的 ViewControllers 是你 VIPER 模型中的 Presentor;我在互联网上看到了一些 VIPER 教程,表达方式不同。

PS MVVM 很棒,但它不可扩展,我谦虚地建议看看 VIPER。这是一篇好文章,您可能会发现它很有用。

于 2019-05-24T19:38:31.907 回答