iOS中MVVM的正确流程是什么?

时间:2019-11-02 15:59:11

标签: ios swift mvvm ios-mvvm

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

假设我们要在表格视图中显示天气数据。

流程1 :(在此流程中,viewcontroller永远不会在其中包含数据模型对象(甚至不用于在tableview中显示),只要viewcontroller想要进行通信,它将仅通过viewmodel进行通信

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-2)

这是我最喜欢的流程:

1-创建一个名为APIManager的Singelton,用于处理数据提取。

2-ViewController向APIManager请求数据。

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

4-创建dataSourceVariable刷新tableView或collectionView

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