Что такое хороший шаблон для загрузки данных и выполнения различных проверок при запуске приложения? (Рабочий стол) - PullRequest
0 голосов
/ 25 августа 2010

У меня есть приложение, которое должно загружать данные через вызовы веб-службы и выполнять различные проверки разрешений и данных. Довольно типично. В настоящее время я делаю это в фоновом режиме, когда приложение запускается, однако это приложение типа мастера, и поэтому пользователь не может многое сделать, пока все это не будет завершено. Если при этом возникают какие-либо проблемы, я хочу предоставить пользователю полезное сообщение (у вас "отсутствует разрешение x" или "не удалось получить y").

В следующем понимании, я могу изменить то, как я собираюсь что-то делать, но я не могу изменить, какие шаги мне нужно выполнить. Это также было упрощено.

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

Изначально у меня было все в вызове типа LoadAndCheck () для обработки всех необходимых мне элементов. Очевидно, это большой неуклюжий.

Затем я перешел к разбивке каждого шага на шаблон, где каждый элемент находился в классе за интерфейсом

interface IInitialize {
    bool InitializeAction();
    void OnFailure();
}

(т. Е. CheckThisPermission, LoadThisList, CheckThatPermission). Каждый класс выполнял небольшое действие, и если это действие не удавалось (загрузка данных) или было ложным (проверка прав доступа), в нем содержался шаг, который нужно выполнить, чтобы сообщить пользователю о проблеме.

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

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

Так есть ли у вас какие-либо хорошие шаблоны для выполнения чего-то похожего при запуске приложения?

1 Ответ

0 голосов
/ 25 августа 2010

У меня лично есть статический класс SecurityManager, для которого я вызываю методы для проверки определенных типов (групп / элементов / пользователей / и т. Д.) С помощью таких методов, как

HasTradePermission(PermissionType type, User user, Trade trade);
HasInvoicePermission(PermissionType type, User user, Invoice invoice);

Только внутри этого метода я начинаю вызывать является частью группы / какой группы / имеет ли эта группа это, это разрешение и т. Д., Так что, насколько приложение знает, все, с чем оно взаимодействует, это объекты 'HasPermission', поэтому в моем приложении я просто перебрать, например, Торгует и вызывает HasTradePermission.

Внутри них есть объект разрешения, я бы получил список групп, в которые входит пользователь, и проверил бы, есть ли совпадение с одной из групп внутри TradePermissionGroups и т. Д.

...