2010-09-03 3 views
1

Je travaille sur un dialogue d'assistant existant qui est implémenté comme un contrôle de page à onglets (avec les onglets cachés). Les étapes de l'assistant sont définies dans un type énuméré. Lorsque l'utilisateur clique sur un bouton de navigation, l'étape en cours est exécutée via une instruction switch. Chaque branche du commutateur est remplie avec une logique de branchement supplémentaire (if/then/else) qui sauvegarde l'état des différents choix de l'utilisateur et affecte l'étape suivante (qui n'est pas nécessairement séquentielle et ne coïncide pas nécessairement avec la page l'utilisateur).Existe-t-il un meilleur moyen de gérer la progression via un dialogue d'assistant?

Lorsque l'étape en cours est modifié, il déclenche une instruction switch supplémentaire qui met à jour l'interface utilisateur (changement onglet, activer/désactiver les contrôles, etc.)

Comme implémentés l'assistant est très sensible aux changements et nécessite beaucoup de débogage. Je ne peux m'empêcher de penser qu'il existe une meilleure façon de le concevoir. Aucune suggestion?

+0

Qu'est-ce que c'est exactement? Une installation ou la création de quelque chose? – Woot4Moo

+0

@Woot: Cet assistant particulier est un assistant d'importation de données mais il existe un certain nombre d'autres assistants ayant un design similaire dans l'application. Donc, si j'entends une meilleure suggestion, je vais l'appliquer à tous. –

Répondre

0

À ce stade, ma recommandation serait de construire une petite preuve de concept (poc) pour montrer que vous pouvez migrer l'assistant dans sa forme actuelle vers un système plus bien conçu. En regardant cela du point de vue du développement, je suggèrerais de construire le poc pour qu'il corresponde à ce que l'utilisateur voit en termes de noms et d'éléments. De plus, vous devrez enregistrer l'état de l'objet tel qu'il est transmis à chacune des pages, au cas où l'utilisateur effectue un suivi ou fait autre chose. Un autre domaine qui pourrait aider est d'implémenter un moteur de règles tel que DROOLS, ou les règles JBoss au moment de la dernière vérification. Il existe un algorithme dont je ne me souviens pas à ce moment-là qui va vraiment aider à la performance. Donc, pour résumer:
1) Créer un petit poc
2) Utilisez des objets qui ont l'état
3) Recherchez un bon moteur de règles
4) Obtenir l'approbation de faire toutes ces choses.
Je devrais ajouter que je me rends compte que vous avez été brûlé auparavant sur l'ensemble de réécrire, mais ce n'est qu'un module pas toute l'entreprise.

0

J'ai récemment mis en œuvre un design dans notre application pour résoudre un problème similaire. Notre application fonctionne avec des flux de travail qui nécessitent une combinaison variable d'étapes à compléter.

En règle générale, j'ai décidé que les étapes elles-mêmes ne stockent pas d'informations. Ils ne sont pas autorisés à se parler non plus. Ils ont des pointeurs vers des objets Modèle qui contiennent les informations. Je ne suis pas les modèles MVC ou MVP, mais je garde le modèle séparé de l'interface utilisateur de façon assez stricte.

Chaque étape du flux de travail a une méthode OnEnter(bool forward) et OnExit(bool forward) qu'ils doivent implémenter. Dans ceux-ci, vous interrogez le modèle pour mettre à jour vos contrôles ou vice versa. StateEngine Il passe d'une étape à l'autre StateEngine Il conserve une pile de toutes les étapes terminées et lorsque le bouton de retour est enfoncé, l'état actuel est Exit ed et le précédent est Enter éd. Le moteur a une notion de l'ordre par défaut, donc la plupart des étapes demandent simplement au StateEngine de passer à l'étape suivante, quelle qu'elle soit, mais si vous lui demandez de passer à une étape spécifique, elle le fera.Avant cette conception, une importante contrainte de maintenance revenait dans le flux de travail, qui était presque automatiquement fixée dans cette conception. Le design n'a pas résolu la faim dans le monde, mais il maintient le code de l'assistant gérable.

0

J'ai fait des tonnes de magiciens dans ma carrière, avec beaucoup de langues différentes. Habituellement, ce qui fonctionnait le mieux pour moi était d'avoir une sorte de conteneur parent et chaque étape dans une classe/composant différent. Le mécanisme de déclenchement (boutons de type suivant-prev) envoie un message au gestionnaire pour remplacer le contenu dans le conteneur.

En ce moment je fais encore un autre assistant, et cette fois j'utilise un composant WPF d'Actipro et ça a l'air bien. Simple et efficace.

Questions connexes