Obecnie pracuję nad aplikacją na iOS przy użyciu architektury MVVMC. Dowiedziałem się o MVVMC czytając ten article. Jako typowy model MVVM wiemy, że wszystkie główne kontrolery aplikacji, takie jak usługi sieciowe, powinny wywoływać w klasie ViewModel. Ale w architekturze MVVMC możemy użyć albo Koordynatora, albo ViewModel, aby połączyć się z usługami sieciowymi. Nie mogłem ustalić, co jest najlepszym miejscem na to.Jakie jest najlepsze miejsce do wywoływania usług sieciowych w aplikacji iOS z architekturą MVVMC?
Próbuję obecnie zaimplementować stronę listy użytkowników aplikacji za pomocą UITableViewController. Oto niektóre części moich klas UserCoordinator i UserViewModel.
UserCoordinator
class UsersCoordinator: Coordinator {
var window: UIWindow
weak var delegate: UsersCoordinatorDelegate?
var selectedCity: City?
init(window: UIWindow) {
self.window = window
}
func start() {
let storyboard = UIStoryboard(name: "Users", bundle: nil)
if let vc = storyboard.instantiateViewController(withIdentifier: "list") as? UsersListController {
var viewModel = UsersListViewModel()
viewModel.delegate = self as UsersListViewModelDelegate
viewModel.veiwController = vc
vc.viewModel = viewModel
vc.coordinationDelegate = self as CoordinationDelegate
let nav = UINavigationController.init(rootViewController: vc)
window.rootViewController = nav
}
}
UserViewModel
protocol UsersListViewModelDelegate: class {
func selectUser(viewController: UIViewController, city: City)
}
struct UsersListViewModel {
var delegate: UsersListViewModelDelegate?
weak var veiwController: UsersListController!
var source = [String]()
init() {
for user in users {
source.append(user.name)
}
}
func selectRow(row: NSInteger) {
delegate?.selectUser(viewController: veiwController, user: users[row])
}
fileprivate var users: [User] {
get {
//web service call??
}
Gdzie należy wezwać serwis internetowy tutaj? Jak czytałem teoretycznie, koordynator jest dedykowanym miejscem do routingu aplikacji. Więc zgodnie z tym lepiej jest połączyć się z usługami sieciowymi w ViewModel. Ale uważam, że lepiej jest wywoływać usługi sieciowe w koordynatorze, ponieważ bardzo szybko załaduje dane i zapełni viewModel. Co powinienem zrobić?
Tak. Stworzyłem już klasę usług, szukając gdzie wywołać te metody. Jak już powiedziałeś, czuję się lepiej, gdy powołuję się na koordynatora. Dziękuję Ci bardzo. – TharinduKetipe