Все экраны в приложении состоят из двух частей: видимой (UI) и логической (ViewModel). Каждому экрану соответствует отдельная папка в проекте:
- Core/ViewModels/ScreenName/ScreenNameViewModel.cs
- iOS/Views/ScreenName/ScreenNameViewController.cs
- Droid/Views/ScreenName/ScreenNameFragment.cs
ViewModel – абстракция экрана – работает с несколькими сущностями, чтобы обеспечивать должный уровень абстракции для каждого слоя. Основными такими сущностями являются:
- ApiService – сервис из API слоя модуля, необходим для реализации логики взаимодействия с сервером
- VmService – сервис, который берет на себя всю работу, которая выполняет ViewModel за время своего существования (обычно именно он работает с ApiService, отдавая в VM уже подготовленные данные)
- NavigationVmService – сервис, являющийся основой для навигации внутри модуля и между модулями
- Messages – подписки на сообщения от других моделей, если нет другого способа получить данные (например, об обновлении определенного значения в другом модуле)
Для обеспечения корректной работы каждая ViewModel должна наследоваться от BaseViewModel
и имплементировать два метода: void Prepare(IMvxBundle parameter)
и Task Initialize()
.