【问题标题】:which is a correct flow for MVVM in iOS?iOS 中 MVVM 的正确流程是什么?
【发布时间】:2019-11-02 15:59:11
【问题描述】:

到目前为止,我已经观察到 MVVM 设计模式的多个流程。不确定这两个中哪一个是正确的?

假设我们想在 tableview 中显示天气数据。

流程 1:(在此流程中,viewcontroller 将永远不会在其中包含数据模型对象(即使在 tableview 中也不用于显示目的),每当 viewcontroller 想要进行通信时,它将仅通过 viewmodel 进行通信)

  1. viewcontroller 通知相关 viewmodel 获取天气数据。
  2. viewmodel 查询 API 来获取天气数据。
  3. 从 API 获取数据后,通知视图控制器的视图模型已到达。
  4. 视图控制器重新加载 tableview。
  5. tableview 单元格从 viewmodel 获取天气信息,匹配 tableview 索引路径。

流程 2:(在此流程中,viewcontroller 使用/访问数据模型对象以在 tableview 中显示)

  1. viewcontroller 通知相关 viewmodel 获取天气数据。
  2. viewmodel 查询 API 来获取天气数据。
  3. 从 API 获取数据后,视图模型通知 viewcontroller 数据已到达,并随之发送相关数据。
  4. 视图控制器重新加载 tableview 并显示它从 viewmodel 获得的天气数据。

【问题讨论】:

    标签: ios swift mvvm


    【解决方案1】:

    在我看来,第一个流程更好,因为

    ViewModel 应该保留数据,而不是视图控制器。它会让你的事情变得简单。你应该声明你的变量,例如视图模型中的一些数据数组而不是视图控制器。

    您不必向/从视图模型/视图控制器发送数据。只需通过委托通知视图控制器一些数据已经到达。

    【讨论】:

      【解决方案2】:

      这是我最喜欢的流程:

      1 - 创建一个名为 APIManager 的 Singelton 来处理数据获取。

      2 - ViewController 从 APIManager 请求数据。

      3 - 在视图模型中注入您获取的数据。

      4 - 创建 dataSourceVariable 刷新你的 tableView 或 collectionView

      var dataSource: [ViewModel]? {
            didSet {
                (tableView/collectionView).reloadData()
            }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        • 2021-03-28
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        • 1970-01-01
        相关资源
        最近更新 更多