У меня есть приложение, которое должно загружать данные через вызовы веб-службы и выполнять различные проверки разрешений и данных. Довольно типично. В настоящее время я делаю это в фоновом режиме, когда приложение запускается, однако это приложение типа мастера, и поэтому пользователь не может многое сделать, пока все это не будет завершено. Если при этом возникают какие-либо проблемы, я хочу предоставить пользователю полезное сообщение (у вас "отсутствует разрешение x" или "не удалось получить y").
В следующем понимании, я могу изменить то, как я собираюсь что-то делать, но я не могу изменить, какие шаги мне нужно выполнить. Это также было упрощено.
Типичный предмет может выглядеть следующим образом. Мне нужно получить список групп, к которым принадлежит пользователь. Однако сначала мне нужно проверить, есть ли у пользователя разрешение на просмотр этого списка групп, иначе другой вызов не удастся. После того, как у меня есть список, мне нужно проверить, есть ли у них определенные разрешения для каждого элемента, и отменить те, которые не применяются. Если у них нет разрешения ни в одной из групп, сообщите об этом пользователю.
Изначально у меня было все в вызове типа LoadAndCheck () для обработки всех необходимых мне элементов. Очевидно, это большой неуклюжий.
Затем я перешел к разбивке каждого шага на шаблон, где каждый элемент находился в классе за интерфейсом
interface IInitialize {
bool InitializeAction();
void OnFailure();
}
(т. Е. CheckThisPermission, LoadThisList, CheckThatPermission). Каждый класс выполнял небольшое действие, и если это действие не удавалось (загрузка данных) или было ложным (проверка прав доступа), в нем содержался шаг, который нужно выполнить, чтобы сообщить пользователю о проблеме.
Затем я могу выполнить цикл по этим классам и при неудаче одного шага не выполнять следующие шаги и настроить вещи для информирования пользователя. Это также поддается DI в будущем, если я остановлюсь на этом шаблоне.
Однако что-то не так с этим шаблоном, хотя это лучше, чем все за один большой звонок. Может быть, это просто имя, которое я даю вещам. Однако мой мозг уничтожен, и я не придумываю ничего лучшего.
Так есть ли у вас какие-либо хорошие шаблоны для выполнения чего-то похожего при запуске приложения?