MVVM: что делать при сбое вызова службы - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть приложение WP7, которое использует шаблон MVVM. Когда пользователь переходит со страницы на страницу в приложении, мне нужно вызвать службу WCF, чтобы получить данные.

Все отлично работает. Но что мне делать, если сбой вызова службы?

Прямо сейчас я делаю MessageBox.Show("Some error message."); внутри модели представления, но не должно ли это как-то быть сделано в представлении? Как бы я это сделал? С привязкой данных? Как?

Я также хотел бы вернуться назад, если вызовы службы не будут выполнены:

if ( NavigationService.CanGoBack ) { NavigationService.GoBack(); }

Но как бы я реализовал это в представлении с MVVM?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Я один из разработчиков Catel, который является фреймворком с открытым исходным кодом MVVM.Мы поддерживаем несколько сервисов, которые содержат как реальную, так и тестовую реализацию сервисов.Таким образом, если вам нужно показать окно сообщения, вы можете сделать это:

var messageService = GetService<IMessageService>();
messageService.Show("This is a message");

Конечно, в модульном тестовом варианте этой службы окно фактического сообщения не будет отображаться, но вы можете добавитьожидаемые результаты, так что вы можете на самом деле проверить пользователя, отвечающего OK или отменить.

То же самое для службы навигации:

var navigationService = GetService<INavigationService>();
navigationService.Navigate("/UI/Pages/MyNewPage.xaml");
// OR
navigationService.Navigate<MyViewModel>();

На мой взгляд, это путь, по которому вам нужно идти, и хорошофреймворки, такие как Caliburn.Micro и Catel поддерживают это из коробки.

0 голосов
/ 05 апреля 2011

Я использую платформу Caliburn Micro MVVM, с ее помощью вы можете справиться с этими проблемами следующими способами.

Уведомления из модели представления могут быть выполнены различными способами, если вы используетеСопрограммы в CM, затем вы можете создать NotificationResult, который взаимодействует с отдельно от модели представления.Другой подход заключается в том, чтобы иметь какую-то модель представления источника уведомлений, которая связана с элементом управления уведомления в представлении.У меня есть некоторый пример кода для этого подхода на Контроль уведомлений Windows Phone 7 .

Снова в структуре CM есть интерфейс INavigationService, который вы можете объявить как зависимость вашей модели представлениянавигация через это.Преимущество этого состоит в том, что все это тестируется на модуле.

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