Мой подход к MVVM прост, ViewModel отвечает за бизнес-логи c, работающие с репозиториями (Network, Database, et c.) И всеми кодами не-UI, подготавливающими необходимые данные для UI, просто как документация :
Объект ViewModel предоставляет данные для определенного компонента пользовательского интерфейса c, такого как фрагмент или действие, и содержит бизнес-логику обработки данных c общаться с моделью. Например, ViewModel может вызывать другие компоненты для загрузки данных и может пересылать запросы пользователей на изменение данных. ViewModel не знает о компонентах пользовательского интерфейса, поэтому на него не влияют изменения конфигурации, такие как воссоздание действия при повороте устройства.
С другой стороны, ViewModels не должен хранить контекст (ApplicationContext является исключительным), и предпочтительно, чтобы они вообще не использовали API android, поэтому они становятся более тестируемыми (особенно в случае чисто модульных тестов).
Также мы рекомендуем использовать LiveData в ViewModels и пользовательском интерфейсе должен соблюдать LiveData. Например, в onCreate
вашего Activity вы будете вызывать метод loadMainContent()
из VM, он вызывает getMainContent(page=1)
из репозитория, и репозиторий решит загрузить данные из БД или сети, а результат будет установлен на LiveData, в котором View прослушивает изменения.
TL; DR
Иногда даже лучше вызывать эти утилиты из View, а не из VM. Я почти уверен в вашем UiUtil
, также я думаю, что TimeDateManager
больше относится к просмотру, чем к логикам c. Кроме того, уровни сети и базы данных более эффективны, если их вызывать из хранилища (которое отвечает за кэширование и т. Д. c.), И виртуальная машина может использовать это хранилище.