До сих пор я наблюдал несколько потоков для шаблона проектирования MVVM. Не уверены, какой из этих двух правилен?

Предположим, мы хотим отображать данные о погоде в виде таблицы.

Поток 1: (В этом потоке контроллер представления никогда не будет иметь внутри себя объекты модели данных (даже для целей отображения в табличном представлении), всякий раз, когда контроллер представления хочет связаться, он будет взаимодействовать только через модель представления)

  1. viewcontroller информирует связанную модель просмотра для получения данных о погоде.
  2. API запросов viewmodel для получения данных о погоде.
  3. после получения данных из API, модель представления проинформировала контроллер представления о данных.
  4. просмотр контроллера перезагрузить tableview.
  5. Ячейка tableview извлекает информацию о погоде из модели просмотра, соответствующей пути индекса tableview.

Поток 2: (В этом потоке контроллер представления использует / обращается к объектам модели данных для отображения в табличном представлении)

  1. viewcontroller информирует связанную модель просмотра для получения данных о погоде.
  2. API запросов viewmodel для получения данных о погоде.
  3. после получения данных из API модель представления проинформировала контроллер представления о том, что данные были получены, а также отправит вместе с ними связанные данные.
  4. контроллер просмотра перезагрузит tableview и отобразит данные о погоде, которые он получил из модели просмотра.
-1
Matrix 2 Ноя 2019 в 18:59

2 ответа

На мой взгляд, первый поток лучше, потому что

ViewModel должен хранить данные, а не контроллер представления. Это упростит вам задачу. Вы должны объявить свои переменные, например. некоторый массив данных в модели представления вместо контроллера представления.

Вам не нужно отправлять данные в / из модели представления / контроллеров представления. Просто проинформируйте контроллеры представления через делегата о получении некоторых данных.

1
Waseem Khan 3 Ноя 2019 в 07:43

Это мой любимый поток:

1 - Создайте Singelton под названием APIManager для обработки выборки данных.

2 - ViewController запрашивает данные у APIManager.

3 - Вставьте данные, которые вы выбрали, в модель представления.

4 - создать dataSourceVariable, обновить tableView или collectionView

var dataSource: [ViewModel]? {
      didSet {
          (tableView/collectionView).reloadData()
      }
}
-2
youssef mostafa 3 Ноя 2019 в 01:38