2010-05-31 6 views
2

Je viens de m'impliquer dans la migration d'une série de workflows complexes avec des interfaces utilisateur InfoPath vers des interfaces utilisateur Web. Je suis nouveau à ASP.Net MVC, mais j'ai commencé à l'évaluer comme la technologie par rapport à ASP.Net classique pour le travail.ASP.Net MVC vs ASP.Net pour les workflows complexes

Comme c'est le cas pour la plupart des flux de travail, dans chaque état, un certain nombre de règles métier déterminent (a) qui peut voir quel contenu; (2) qui peut éditer quel contenu; (3) ce que les options d'action de l'utilisateur pourraient être (Edit, Reject, Approve), etc. Essentiellement, il y a beaucoup de logique qui doit être appliquée à chaque demande avant de présenter la vue appropriée. Étant plus expérimenté dans ASP.Net, je sais que la présentation du (des) formulaire (s) selon les besoins peut être facilement réalisée grâce au code derrière les pages (activer/désactiver/masquer les champs). Je n'ai pas vu comment cela peut être réalisé avec ASP.Net MVC (mais je me rends compte que de nouvelles réflexions sont nécessaires lorsque je travaille avec MVC - 'Donner seulement le contenu sur une vue particulière + options d'action utilisateur limitées'). Par conséquent, si vous utilisez ASP.Net MVC, il semblerait que je devrais créer beaucoup de vues. Une grande partie du contenu de chaque vue serait la même. Seul l'état activé par champ ou les boutons diffèrent dans la plupart des cas pour ces vues dans chaque état. Par exemple: Step01Initiate (bouton 'Save'); Step01OriginatorView (a le bouton 'Edit'); Step01OriginatorEdit (a le bouton 'Enregistrer'); Step01Review (a boutons 'Accepter'/'Rejeter'); Step01ReviewReject (pour les notes du réviseur, a les boutons 'Enregistrer'/'Annuler'). Avec des workflows allant jusqu'à six états, cela donnerait beaucoup de vues. Je peux voir les avantages de choisir ASP.MVC (1) «minces» vues en termes de contenu; et (2) avec la consolidation logique dans les contrôleurs et différents modèles. Est-ce que je pense dans le bon sens en termes d'application du MVC - «beaucoup de vues»; ou existe-t-il un meilleur moyen d'atteindre mon objectif (en utilisant ASP.Net MVC ou ASP.Net classique)?

Répondre

1

J'utiliserais certainement ASP.NET MVC pour cela. Avec une telle logique commerciale, je dirais que les préoccupations séparées qui en découlent faciliteraient le développement et la maintenabilité. Bien que changer une page pour qu'elle ressemble à une page différente (supprimer/ajouter des boutons, etc.) fonctionne, c'est quelque chose que je suis de plus en plus mal à l'aise en ce qui concerne la maintenabilité, car elle associe étroitement l'interface utilisateur et logique. Utiliser des vues et des contrôleurs est une meilleure approche à mon avis.

Dans votre situation, vous auriez un contrôleur avec une action différente pour chaque étape. Chacune de ces actions renvoie une vue appropriée à l'utilisateur.

+0

Excellent - Merci David. Cela m'aide à me diriger dans la direction ASP.MVC. –

0

Je viens de passer un peu de temps à travailler sur une application similaire. Ma première suggestion serait d'obtenir autant de choses de flux de travail de l'application et dans un runtime Windows Workflow que vous le pouvez. Il vous fera économiser beaucoup de douleur et d'aggravation en ayant à gérer manuellement l'état, etc. AppFabric a été récemment publié/annoncé (RTM est Juin). Vous pouvez l'utiliser pour héberger tous vos flux de travail, et il prendra soin de la persistance et de tout cela pour vous. Bien que les vues ASP.NET soient minces, vous pouvez avoir une logique conditionnelle dans celles-ci (dans une certaine mesure). Vous pouvez ensuite placer le rôle (s) que l'utilisateur actuel est dans votre viewmodel. Ensuite, dans votre code d'affichage, vous pouvez vérifier si un utilisateur est dans un rôle particulier ou non, et rendre/exclure des sections en fonction de cela. Vous pouvez également utiliser des éléments tels que RenderAction pour factoriser des sections communes de vos vues afin d'éviter de nombreuses opérations de copier/coller.

Votre code ressemblerait à quelque chose comme:

<!-- common html here --> 

<% if( model.UserRole.InRole([some role])) { %> 
    <input type="button" /> 
<% } %> 

Trop de cela pourrait conduire à étiqueter la soupe (and there are ways to clean it up), mais il semble que vous serez limité à une poignée d'actions qu'un utilisateur est en mesure accomplir.

L'autre alternative consiste à faire passer la liste des actions disponibles dans la vue, puis à les parcourir et à les restituer. Cela élimine entièrement les préoccupations de la gestion des rôles utilisateur/etc et déplace cette logique plus loin dans votre couche de gestion (où elle appartient probablement).

+0

Merci pour votre aide. Excellents liens. –