【问题标题】:Navigation in MVVM Architecture [closed]MVVM 架构中的导航 [关闭]
【发布时间】:2021-06-05 06:03:32
【问题描述】:

在使用 MVVM 架构实现的 Android 或 iOS 项目中,正确的导航方法是什么?

  1. ViewModel 决定导航发生的时间和目的地
  2. ViewModel 决定导航何时发生,View 决定哪个是目的地
  3. 视图决定导航发生的时间和目的地

【问题讨论】:

  • 选项1和3相同。
  • 但是我们在 SwiftUI 中不再有任何 ViewModel 的概念!所有的想法都是让它成为不同于 UIKit 中发生的值类型。
  • @swiftPunk MVVM 和ViewModels(通常以ObservableObject 的形式)在 SwiftUI 中非常常见。也许你在想UIViewController
  • 正如我所提到的,我们没有 View 类型的模型,我们可以称之为 ViewModel,而是我们有值类型 View,它们在 SwiftUI 中是 struc。
  • @swiftPunk -- 看看这个例子:vadimbulavin.com/…nalexn.github.io/clean-architecture-swiftui View/ViewModel 是两个不同的东西。两者都存在于 SwiftUI 中

标签: android ios kotlin mvvm swiftui


【解决方案1】:

我相信应该是这样的:

  1. ViewModel 决定导航发生的时间、目的地以及要传递到目的地的数据(如果有)。
  2. View 执行实际操作,决定导航动画和其他 UI 内容。

所以最终我们需要将逻辑放在ViewModel 中,而UI 的东西应该由View 负责。

一种方法是在需要导航时在ViewModel 中触发Event。此事件应指定要传递的目标和数据(如果有)。 View 订阅此事件,每当它被触发时,它决定导航动画,然后执行实际操作(导航的实际操作是 UI 的一部分),同时考虑到目的地和要传递的数据.

【讨论】:

  • 所以你相信选项 1 对吗? :) 但我发现选项二是一个有效的答案。例如,您可以有多个事件,例如(navigateToDetailsEvent、navigateToAboutEvent),如果您有一个按钮,它的作用是导航到关于屏幕,那么您可以将该按钮连接到 navigateToAboutEvent。使用这种架构,视图决定他的按钮需要导航到 about screen,但 viewModel 决定何时发生。
  • 嗯,我明白你的意思。我想这两种方法在不同的情况下都是正确的。假设您有一个按钮,该按钮可以根据用户类型执行不同的操作(例如,对于 Manager,它会转到不同的屏幕,而对于 Employee,它会转到不同的屏幕),那么用户类型的确定应该在 ViewModel 中。所以这里ViewModel 可以决定目的地,或者ViewModel 可以针对每种情况有不同的事件,目的地由View 决定。你有一个很好的观点。
猜你喜欢
  • 2019-02-21
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多