【问题标题】:Where does the coordinator go in a RxSwift + MVVM + Coordinator situation if coordinators aren't in RxSwift?如果协调器不在 RxSwift 中,那么协调器在 RxSwift + MVVM + 协调器的情况下会去哪里?
【发布时间】:2019-10-08 02:00:10
【问题描述】:

我会尽可能简短:我们启动了完整的 RxSwift 应用程序,但我们的协调员开始不堪重负地维护和扩展,因此我们正在重新设计他们以不使用 RxSwift,现在我们无法弄清楚如何使用它们以及保存它们的位置。

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

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

【问题讨论】:

    标签: ios swift mvvm rx-swift coordinator-pattern


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      1. 互联网上的大多数教程都教你为每个UIViewControllers 创建一个单独的协调器但是我亲自问过这个问题,他回答说:这不是最好的做法协调员。所以我在最新的应用程序中只使用了两个协调器,并且对结果非常满意。
      2. 如果您想花一些时间在 VIPER 上,我建议假设您的 ViewControllers 是您的 VIPER 模型中的 Presentor;我在网上看到了一些 VIPER 教程,表达的不是这样。

      附: MVVM 很棒,但它不可扩展,我谦虚地建议看看 VIPER。这是a good article,您可能会觉得有用。

      【讨论】:

      • 我不认为我们在使用 VIPER,因为架构和实现不同;感谢您的建议,但对于我们需要做的事情来说,它太过分了,我们发现 MVVM 非常适合现在。目前,我们为应用程序的每个部分都有一名协调员,由 3-4 名 VC 组成。我想,由于上下文取决于 VC,所以我们应该把协调员放在哪里。谢谢!
      • @MattiaC。您可以随意称呼它,这有点像品味问题。我个人认为,如果你将协调器模式与 MVVM 一起使用,你可以称之为 VIPER。然而,名字并不重要。祝您好运。 ?
      • @MattiaC。 MVVM 架构没有 Routing 元素,Zich 是对的,如果您已将 Coordinators 添加到 MVVM,那么您就有了 VIPER。就像将 ViewModel 添加到 MVC 时一样,您有一个 MVVM。有时我们不必在应用程序中包含架构的所有部分,但这并不意味着我们没有使用该架构。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 1970-01-01
        • 2020-07-08
        • 2018-06-29
        相关资源
        最近更新 更多