2017-10-11 10 views
0

Supposons que vous avez une application console avec:La vérification de l'entrée de l'utilisateur doit-elle être effectuée au niveau de la classe ou de l'interface utilisateur?

Main.java et ClassA.java

Votre classe principale contient la méthode public static void main(String[] args) où vous exécutez votre programme, et il utilise l'entrée d'utilisateur comme arguments pour appeler sur les méthodes en ClassA.

Mettez-vous la vérification d'entrée utilisateur dans la méthode main avant d'envoyer les arguments aux méthodes ClassA?

OU

Est-ce que vous mettez la vérification des entrées utilisateur dans les ClassA méthodes qui transmettre un message de retour indiquant l'entrée réussie ou non? Ou jeter une exception?

, c'est-à-dire Integer.Parse(...) déclenche NumberFormatException en cas d'entrée non valide.

+0

L'entrée provient-elle de la console ou d'une interface graphique fournie en "ClassA"? Si vous imaginez les classes sont des personnes ... qui "posséder" ces arguments? Pouvez-vous imaginer utiliser ClassA dans un autre contexte avec exactement les mêmes arguments? Y a-t-il seulement ClassA ou ClassB et ClassC utilisant ces arguments? – Stefan

+0

@Stefan Les entrées proviennent de la console (interface utilisateur non graphique) – NoName

+0

Et ClassA n'est utilisé que par la méthode 'main'. – NoName

Répondre

1

Vous pourriez vouloir lancer des exceptions significatives dans la classe A et laisser votre méthode principale décider si/comment gérer ces exceptions. Lorsque vous réutilisez la classe A, le nouvel appelant peut vouloir prendre d'autres décisions.

Je recommande le chapitre "ErrorHandling" du Book CleanCode (Robert C. Martin). Il dit par exemple "Définir le flux normal", "Utiliser les exceptions plutôt que les codes de retour", "Séparer la logique métier et la gestion des erreurs".

Dans certains cas, il est important d'obtenir une rétroaction rapide ... n'attendez pas deux heures pour qu'un calcul soit terminé et obtenez une exception à 90%. Dans d'autres cas, il est plus important d'obtenir des commentaires détaillés. Voir aussi Data validation: fail fast, fail early vs. complete validation

Vérifiez s'il est facile de lire votre code et de comprendre le flux normal. Chaque fonction ne devrait faire qu'une seule chose/modéliser un niveau d'abstraction. La gestion des exceptions est une abstraction d'un niveau.

+0

Merci, j'ai décidé au niveau de l'interface utilisateur de m'assurer que l'entrée est dans le bon type de données à transmettre aux méthodes de classe (c'est-à-dire que le numéro de carte de crédit est réellement un nombre). Et dans la méthode de classe, validez la logique métier (c'est-à-dire si le numéro de carte de crédit est en fait un numéro de carte de crédit). – NoName

+0

Mabe commons cli vous intéresse: http://commons.apache.org/proper/commons-cli/ Autres options pour analyser les arguments de la ligne de commande: https://stackoverflow.com/questions/367706/how-to- parse-command-line-arguments-en-java – Stefan