我会尽可能地简短:我们将应用程序完整地启动为RxSwift,但协调员开始不堪维护和扩展,因此我们对其进行了重新设计以不使用RxSwift,现在我们不知道该如何使用它们以及存放它们的位置。
最简单的示例:带有1个按钮的视图控制器,视图模型,协调器。
我在哪里叫coordinator.navigate(to: .mySection)
,怎么称呼?应该将协调器保留在视图控制器中吗?我认为应该将它们保留在视图模型中,但不建议在视图模型中订阅。
我不想为此过度设计,但是希望获得一些有见地的帮助。
答案 0 :(得分:2)
没有一个MVVM元素可以直接解决Coordinators
,因此,如果您使用Soroush的Coordinator模式的好处,则可能正在使用VIPER,但您可能没有意识到这一点,这并不是很重要。
在VIPER中,R代表 Routing (路由),它完全符合协调器的定义。
我真正想建议的两件事是:
UIViewController
的 BUT 创建一个单独的协调器,我亲自向soroush询问,他回答:这不是最好的与协调员一起练习。因此,我在最新的App中仅使用了两个协调器,并对结果感到非常满意。P.S。 MVVM很棒,但它不可扩展,我建议您看一下VIPER。这是a good article,您可能会觉得有用。
答案 1 :(得分:0)
如果要将协调器用作ViewModel的依赖项,请签出以下库:Action。
Action使您可以将按钮与ViewModel绑定在一起。您只需在ViewModel中定义一个动作,然后将其绑定到视图中即可。动作类型只是一个序列,它接受其他序列作为输入并返回另一个序列作为输出。因此,您无需在ViewModel上使用DisposeBag。
如果您想查看示例,请查看Action的GitHub项目,或者,如果您想在应用示例中查看,Ray Wenderlich RxSwift书中有一个漂亮的示例,说明如何集成MVVM和协调器。
答案 2 :(得分:0)
我建议使用XCoordinator及其建议的架构MVVM-C,我已经在2个大型/复杂应用程序中使用过,这很容易。