2010-08-25 8 views
0

J'ai une application qui a besoin de charger des données via des appels de service Web et d'effectuer diverses vérifications d'autorisation et de données. Assez typique. Je le fais actuellement en arrière-plan lorsque l'application démarre, mais il s'agit d'une application de type assistant et l'utilisateur ne peut donc pas faire grand chose tant que tout cela n'est pas terminé. Si des problèmes surviennent lors de cette opération, je souhaite présenter un message utile à l'utilisateur (vous avez "l'autorisation x manquante" ou "Impossible d'extraire y"). Pour ce qui suit, sachez que je peux changer la façon dont je vais faire quelque chose, mais je ne peux pas changer les étapes que je dois effectuer. Cela a également été simplifié.Qu'est-ce qu'un bon motif pour charger des données et effectuer diverses vérifications au démarrage de l'application? (bureau)

Un article typique pourrait aller comme ceci. J'ai besoin de récupérer une liste de groupes auxquels l'utilisateur appartient. Cependant, je dois d'abord vérifier si l'utilisateur a l'autorisation d'afficher cette liste de groupes sinon l'autre appel échouera. Une fois que j'ai la liste, je dois ensuite vérifier si elles ont certaines autorisations dans chaque élément et rejeter celles qui ne s'appliquent pas. S'ils n'ont pas d'autorisation dans l'un des groupes, informez l'utilisateur.

Initialement, j'avais tout dans un appel de type LoadAndCheck() pour élaborer tous les différents éléments dont j'avais besoin. De toute évidence, c'est un gros maladroit.

Je puis déplacé à une rupture dans chaque étape jusqu'à motif où chaque élément est dans une classe derrière une interface

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

(à savoir CheckThisPermission, LoadThisList, CheckThatPermission). Chaque classe a exécuté une petite action et si cette action a échoué (chargement de données) ou était fausse (vérification d'autorisation), elle contenait l'étape à effectuer pour informer l'utilisateur du problème.

Je peux ensuite parcourir ces classes et en cas d'échec d'une étape, ne pas effectuer les étapes suivantes et avoir des choses configurées pour informer l'utilisateur. Cela se prête également à DI sur la route si je m'installe sur ce modèle.

Cependant, quelque chose ne va pas avec ce modèle, mais c'est mieux que tout dans un grand appel. Peut-être que c'est juste le nom que je donne aux choses. Cependant, mon cerveau est anéanti et je ne trouve rien de mieux.

Alors avez-vous de bonnes habitudes pour faire quelque chose de similaire au démarrage de votre application?

Répondre

0

J'ai personnellement une classe statique SecurityManager que j'appeler des méthodes sur pour vérifier certains types (groupes/articles/utilisateurs/etc) avec des méthodes telles que

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

Seulement dans cette méthode que je commence à appeler le est- une partie du groupe/quel groupe/ce groupe a-t-il ceci et cette permission etc., pour autant que l'application soit au courant, tout ce qu'il interagit avec les objets 'HasPermission', donc dans mon application je viens juste de parcourir par exemple Trades, et appelez HasTradePermission.

l'intérieur de ces objets a la permission, je voudrais obtenir la liste des groupes que l'utilisateur fait partie et vérifier s'il y a une correspondance avec l'un des groupes à l'intérieur des TradePermissionGroups etc ..