MVVM лучшая практика для меню - PullRequest
2 голосов
/ 22 июня 2019

Долгое время слушатель, впервые звонящий. Я довольно новичок в этом, и я думаю, что это довольно простой вопрос.

Я создаю приложение Xamarin.Forms и у меня есть несколько статических меню. Вопрос в том, лучше ли использовать события «OnClick» в «CodeBehind» для меню или создавать ViewModel и связывать их с командами навигации?

Я оставил код пустым (за исключением обязательных контекстов) для всего остального, и меня раздражает, что он есть для меню. Есть ли какая-то польза в любом случае?

OnClicked: .xaml

<Button Text="Fridge and Freezer" WidthRequest="300" BackgroundColor="DeepSkyBlue" Clicked="onClickedEvent_FridgeFreezer"/>

.cs (в CodeBehind)

async void onClickedEvent_FridgeFreezer(object sender, EventArgs args)
        {
            await Navigation.PushAsync(new FridgeFreezer());
        }

OR

Переплет: .xaml

<Button Text="Fridge and Freezer" WidthRequest="300" BackgroundColor="DeepSkyBlue" Command="{Binding GoToFridgeFreezer}"/>

.cs (в модели представления)

public ICommand GoToFridgeFreezer{ get; private set; }

async void GoToFridgeFreezer()
{
wait Navigation.PushAsync(new FridgeFreezer());
}

Ответы [ 3 ]

3 голосов
/ 22 июня 2019

Смысл MVVM в том, чтобы сделать его таким, чтобы вы могли тестировать как можно большую часть своего приложения, фактически не запуская его.

Используя автоматическое тестирование пользовательского интерфейса, теперь можно проверить, что навигация происходит правильно, если она запускается представлением, но для этого требуется запустить приложение и фактически запустить весь поток управления. Так что, хотя это возможно, это все еще довольно неловко и медленно. Могут быть и другие фреймворки, которые лучше подходят для этого, но я обнаружил, что страницы Xamarin.Forms не совсем хорошо работают с модульным тестированием. Использование навигации на основе представлений в моем опыте означает, что приложение автоматически становится менее тестируемым.

Однако, если вы кодируете навигацию в своих моделях ViewModels, вы можете проверить это, не запуская приложение. Вы создаете экземпляр ViewModel в своем тесте, отправляете имитированный ввод, который должен вызывать навигацию, и наблюдаете, куда он пытается перейти. Это намного проще, чем тестирование навигации на основе View, и это очень быстро. Большинство приложений MVVM, над которыми я работал (WPF, Xamarin), имели логику навигации в ViewModel, то есть я имею в виду, что интерфейс внедряется для обеспечения запуска навигации.

1 голос
/ 22 июня 2019

Что ж, лучшие практики советуют делать все во ViewModel и сохранять код как можно более простым.

0 голосов
/ 04 июля 2019

Спасибо всем за их комментарии и поддержку.

По мере того, как я углублялся в это, я обнаружил, что мне требуются динамизм и логика, встроенные в некоторые пункты меню, поэтому переходить к ViewModel было несложночтобы справиться с этим.

Если кто-то еще читает это, то я бы посоветовал вам пойти по маршруту ViewModel, как это будет, если что-нибудь даст вам гибкость, чтобы измениться без тонны работы.

Специальныйблагодаря user11639555, я только начал играть с тестами, и это было неоценимо:) !!!

Удачи всем вам:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...