MVVM Xamarin Forms, лучший для хранения функции в памяти, в то время как она ожидает нескольких минут ответа от сервисного вызова - PullRequest
3 голосов
/ 13 февраля 2020

Сценарий:

Мне звонят в службу WCF, на получение ответа которой потребуется несколько минут.

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

После выполнения сервисный уровень возвращает ответ в хранилище , а затем в ViewModel , который затем вызывает диалог пользователю, предоставляющему ему ряд опций.

Проблема:

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

Так что в скорлупе ядра мне нужно сохранить в памяти любую функцию, получающую ответ от хранилища, до ее завершения.

Чтобы обойти это, я переместил диалог и функцию в репозиторий , так как это синглтон, поэтому он останется в памяти, но это побеждает Single Responsibility , так как репозитории должны Отвечать только за предоставление данных, не осуществляющих бизнес логи c.

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

У кого-нибудь есть лучшие практики для обработки этого сценария или какой-либо документации, к которой он мог бы отослать меня?

Спасибо за вашу помощь заранее:)

1 Ответ

1 голос
/ 13 февраля 2020

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

...