Best Practise для обработки Post запросов в windows phone (silverlight)

Я хочу спросить как вы обычно архитектурно реализуете обработку Post запросов в ваших мобильных приложениях(все почти тоже самое в обычных silverlite приложениях). Т.к. мы вынуждены делать все вызовы «очень» многопоточными, появляются вопросы о построении инфраструктуры для обмена данными.

А. UI приложения
Б. Создание HttpWebRequest
В. Метод для BeginGetRequestStream
Г. Метода для BeginGetResponse

Кейсов, которые хочу обсудить несколько:

1. Передача дополнительных параметров от Б к В и Г
2. Обновление А из Г
3. Вынос работы Б, В, Г в отдельную dll и организация обмена данными с А

Как есть у меня сейчас:
1. использую IAsyncResult.State для передачи структуры, в которую упаковываю все что мне нужно
2. использую this.Dispatcher.BeginInvoke(delegate{...});
3. планировал сделать ViewModel для страницы, которую и обновлять из Г. Вопрос, как сказать UI что пора перегрузится и забрать все данные из ViewModel.

Буду благодарен за ваши рецепты приготовления этой каши. А то мой вариант мне не кажется достоаточно красивым и удобным)
  • Вопрос задан
  • 2674 просмотра
Пригласить эксперта
Ответы на вопрос 2
DraculaDIS
@DraculaDIS
Я готовлю так:
Есть страница (View) и модель (ViewModel), для запросов используется клиент с методами примерно такой сигнатуры:

void LoadSomeData<T>(object request, Action<Response, T> onLoad,  Action<ErrorEventArgs<T>> onError = null, T userState = null)


Сам клиент для сервиса вынесен в отдельную dll, дальше все как обычно, реагируем на действие пользователя (через ICommand) дергаем нужный метод, одновременно включая ProgressIndicator и блокируя (если требуется) интерфейс. По возврату onLoad или onError, разблокируем интерфейс и обновляем нужные поля ViewModel, говорим UI что пора обновиться путем реализации INotifyPropertyChanged у ViewModel.
Ответ написан
Комментировать
@codecity
мы вынуждены делать все вызовы «очень» многопоточными

Хорошо заметили. Все было бы намного проще, если бы MS позволили самим решать где применять многопоточность… А раз пошли по такому пути — то и далее нужно усложнять, а именно использовать Reactive Extensions.

То есть если хотите, чтобы все было архитектурно правильно, как задумали MS, то изучите Rx. Но предупреждаю — на их изучение уйдет минимум неделя + готовьтесь к смене парадигмы мышления.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы