Meilleur moyen de rendement de l'indicateur d'état et le message à partir d'une méthode en Java

J'ai un trompeusement simple scénario, et je veux une solution simple, mais il n'est pas évident de ce qui est "correct" ou "la plupart de Java".

Disons que j'ai un petit authentifier(Client Client) méthode dans la classe. L'authentification peut échouer pour plusieurs raisons, et je souhaite retourner un simple booléen pour le contrôle de flux, mais aussi de retourner une Chaîne de message pour l'utilisateur. Ces sont les possibilités que je peux penser de:

  • Retourner un booléen, et passer dans un StringBuilder pour recueillir le message. C'est la plus proche d'un style C moyen de le faire.
  • Lancer une exception au lieu de renvoyer false, et comprennent le message. Je n'aime pas cela, car l'échec n'est pas exceptionnel.
  • Créer une nouvelle classe appelée AuthenticationStatus avec l'opérateur booléen et la Chaîne. Cela semble exagéré pour une petite méthode.
  • Stocker le message dans une variable membre. Ce serait introduire un potentiel condition de course, et je n'aime pas ce qu'elle implique un état qui n'est pas vraiment là.

Toutes les autres suggestions?

Modifier Manqué cette option est désactivée

  • Retourner la valeur null pour le succès - Est-ce dangereux?

Modifier Solution:

Je suis allé pour la plupart OO solution et a créé un petit AuthenticationResult classe. Je ne voudrais pas le faire dans une autre langue, mais je l'aime en Java. J'ai aussi aimé la suggestion
de retour d'un String[] puisque c'est comme le retour null mais plus sûr. L'un des avantages du Résultat de la classe, c'est que vous pouvez avoir un message de succès avec plus de détails si nécessaire.

  • Pouvez-vous expliquer pourquoi est-il plus OO que de retourner sentinelle de la valeur ? Je vais dans la même situation et l'utilisation de votre solution. Mais je ne sais pas pourquoi cette solution est meilleure que les autres.
  • Je pense que d'autres réponses et les commentaires expliquent cela très bien, mais en un mot, une sentinelle de la valeur est dangereux parce qu'il est l'abus d'une faille dans le système de type (une valeur que vous pouvez retourner pour que le type que vous n'avez pas à attendre dans toute autre circonstance). Il est particulièrement dangereux en utilisant null car manque null contrôles sont simples et communs, et qui pourrait conduire à des bugs. C'est plus OO parce qu'il utilise une classe qui définit un type qui signifie "à la Suite d'authentification" ou "Statut avec, en option, les messages" donc il n'y a pas de type d'abus au détriment d'un plus lourd type.
InformationsquelleAutor Draemon | 2008-12-10