Я go при первом подходе с использованием ShareViewModel, но если вы понимаете базовый слой, совместно используемая ViewModel также является ViewModel, это просто соглашение о именах, которое мы им дали.
Также иногда становится утомительно писать отдельную ViewModel для работы с фрагментами и нижним листом, где MainActivity ViewModel также может делать то же самое.
Что я имел в виду, чтобы избежать сложности, я использую одну модель представления для каждого действия. Теперь, когда я хочу выполнить что-то во фрагменте или на нижнем листе, я просто передаю модель представления в самом конструкторе. Многие люди подумают, что это плохая практика, но это не так, в соответствии с концепцией модели представления, она будет создаваться и уничтожаться только в соответствии с жизненным циклом действия, и все время будет создаваться только один экземпляр. Также, делая это, я могу использовать внедрение зависимостей с фрагментом (я не думаю, что DI работает с компонентом навигации, но я думаю, что вы поняли мою точку зрения).