Я рассматриваю структуру очень простого ViewModel и ViewController для тестового приложения. У меня есть что-то похожее:
FirstViewController.m:
- (IBAction)launchButtonSelected:(id)sender
{
[self.viewModel launchActionSelected];
}
FirstViewModel.m:
- (void)launchActionSelected
{
// [todo] - Figure this out.
}
Когда launchButton выбран в FirstViewController, я хочу сделать и представить SecondViewController.
Мои вопросы:
- Есть ли твердое эмпирическое правило, где я должен создать
SecondViewControllerViewModel? - Кто должен инициализировать
SecondViewController? - Где я должен нажать
SecondViewControllerна иерархию представления? (то есть навигация или модальное представление).
Я лично думал:
- ViewModel для
SecondViewController, вероятно, будет создан в его инициализаторе. Это всегда приводит меня к запутанному пути: что, если я хочу передавать информацию отFirstViewModelдоSecondViewModel? Должен ли я открытьSecondViewModelкак общедоступное свойство наSecondViewController, чтобы я мог получить/установить значения на нем? -
FirstViewControllerдолжен создатьSecondViewControllerи -
FirstViewControllerдолжен нажатьSecondViewControllerна экран.
Моя интуиция считает это subpar: я хотел бы изолировать презентацию ViewControllers немного больше, и приложение больше ориентировано на ViewModel, но это кажется трудным сделать. (т.е. "push" ViewModels, а не ViewControllers... но "push" по сути связан с визуальной презентацией приложения, поэтому, возможно, это неправильный способ подумать об этом.)