Рабочий образец доступен по адресу: https://gitlab.com/nipunrd_git/mvvmarch
Я в процессе миграции приложения из MVC в MVVM.Насколько я прочитал, вам нужно сделать свой viewController
независимым от Model
, сделав viewModel
, чтобы склеить модель и контроллер.
Если мы рассмотрим простой screenA
, который имеет кнопку обновления, чтобы получить некоторые данные через веб-сервис и затем заполнить данные в представлении:
ScreenAViewController.swift
: будет содержать код для доступа к веб-службе черезкласс помощника одноэлементной сети.
ScreenA -> NetworkHandler -> fetchData
Чтобы сделать ScreenA, использовать извлеченные данные, теперь мы должны сделать ViewModel
, поэтому я сделалScreenAViewModel
.Допустим, наша модель была названа «Дизайн»:
struct Design{
var pattern: String
}
Теперь наша ViewModel будет выглядеть так:
class ScreenAViewModel{
private let design: Design
public let pattern: String
init (design: Design, pattern: String){
self.design = design
self.pattern = design.pattern
}
}
Когда мы получаем данные из веб-службы, мы должны сначала создать
Design
модель, а затем инициализировать нашу ViewModel с этим.Эта ViewModel теперь будет использоваться нашим контроллером представления для получения и отображения данных.Любая бизнес-логика будет написана только в этом.
Есть ли способ сдвинуть # 3 к самой модели вида?Я думаю, что преобразование модели в viewModel в самом контроллере превосходит цель скрытия модели от контроллера.