2010-03-22 4 views
2

J'écris une application graphique avec wxwidgets en C++ pour l'une de mes classes de programmation. Nous devons valider les entrées et lancer des exceptions personnalisées si elles ne remplissent pas certaines conditions. Ma question est la suivante: quelle est la meilleure pratique en la matière? Dois-je écrire une fonction séparée qui vérifie les erreurs, et l'appel de mon gestionnaire d'événements cette fonction? Ou devrais-je faire ma vérification d'erreur dans mes gestionnaires d'événements? Ou est-ce vraiment important?Meilleure pratique - Validation des entrées dans une application GUI simple?

Merci!

Répondre

2

Lancer des exceptions pour cela semble un peu étrange.

J'ai toujours pensé qu'une application graphique devrait empêcher la saisie de données invalides dans un contrôle, ce qui peut être fait en utilisant des gestionnaires d'événements. Pour les données qui sont incohérentes entre plusieurs contrôles sur un formulaire, cela doit être validé lorsque OK est pressé ou quoi que ce soit, et si les données ne sont pas correctes, empêchez la fermeture du formulaire et indiquez l'erreur. La validation peut également être effectuée avant d'appuyer sur OK, mais elle ne devrait pas empêcher la saisie des données, indiquer uniquement le problème (et éventuellement désactiver le bouton OK jusqu'à ce qu'il soit corrigé). Fondamentalement, la valeur incohérente entrée dans ce contrôle peut ne pas être incohérente une fois que l'utilisateur a modifié la valeur du contrôle suivant vers lequel il se dirige. Essayez d'éviter les boîtes de message pour signaler ces erreurs - une barre d'état ou un contrôle de texte en lecture seule dans le formulaire est préférable.

Une fonction/méthode doit être définie pour effectuer toutes les vérifications de cohérence pour le formulaire, mais elle ne doit pas déclencher d'exception. Une mauvaise entrée n'est pas le cas "exceptionnel" des utilisateurs typiques - cela arrive tout le temps, surtout quand je suis l'utilisateur. Plus précisément, vous ne devriez utiliser des exceptions que lorsque la gestion des erreurs perturberait la structure de votre code, ce qui ne devrait pas être le cas dans un "est-ce que les données dans ce formulaire sont OK - oui, bien, accepter et fermer" gestionnaire d'événements.

La fonction doit simplement renvoyer un code d'erreur pour indiquer quelle erreur signaler - ou signaler l'erreur elle-même et retourner un indicateur d'erreur. Il n'y a pas si longtemps, wxWidgets n'était même pas exceptionnellement sûr - IIRC, vous devez toujours activer la sécurité des exceptions en tant qu'option lorsque vous construisez la bibliothèque.

0

Vous soulevez une plus grande préoccupation que cela, en fait. Pour répondre à votre question, vous pouvez factoriser le code de validation à une fonction différente si vous avez, disons, plusieurs widgets nécessitant la même validation. Ou juste parce que vous le voyez en forme - c'est à vous de décider. Mais la décision de la gestion des erreurs est une question plus architecturale. Considérons design by contract, ce qui signifie que toute méthode suppose que ses paramètres ou entrées sont dans un état valide, et garantit que sa valeur de sortie ou de retour est également valide. Cela implique que vous devriez valider l'entrée de l'utilisateur le plus rapidement possible, plutôt que de laisser la logique interne s'occuper de cela.

Questions connexes