2017-09-25 5 views
0

J'utilise des DAO pour accéder à ma base de données, et ces méthodes dao lancent une exception SQL, donc je fais en sorte que les méthodes dao lancent cette exception.À quel moment mes méthodes devraient-elles cesser de lancer des exceptions?

Alors j'acces par les services de DAO, il ressemble à:

public class UserService implements Service { 

    public int addNewUser(String username, String password) throws SQLException { 
     User user = new User(username, password); 
     UserDao dao = new UserDao(source.getConnection()); 
     return dao.add(user); 
    } 
} 

Ces méthodes jettent exception aussi, mais de cette façon que je dois gérer Exception SQL dans de nombreux endroits et parfois il semble tout à fait mauvais. Dois-je gérer l'exception dans le service ou dao? Ou est-ce ok pour vérifier une exception partout?

+1

dépend. Es-tu le seul à utiliser la bibliothèque? voulez-vous la même gestion des erreurs pour toutes les applications qui l'utilisent? ... Et si quelqu'un d'autre l'utilise, veut des messages d'erreur spécifiques sur l'interface utilisateur, vous gérez tout dans l'arrière-plan .. tout dépend de ce que vous essayez d'atteindre – Stultuske

+1

le jeter dans la mesure nécessaire pour que l'utilisateur sera être affiché avec un message d'erreur afin qu'il sache que quelque chose ne va pas. aussi vous devriez essayer de séparer l'interface graphique et la logique métier – XtremeBaumer

Répondre

2

Cela peut devenir assez subjective. Où devriez-vous gérer vos exceptions? C'est à vous de décider, il n'y a pas de règle. Mon conseil: continuez à lever l'exception jusqu'à ce que vous arriviez à l'endroit où vous voulez l'enregistrer. Si vous voulez afficher un message "Quelque chose ne va pas avec l'accès à la base de données" à l'utilisateur final, il est plus facile d'avoir un "throw SQLException" dans tous les en-têtes de la couche inférieure et d'avoir seulement un try-catch niveau.

BTW, vous déclarez « gérer » l'exception SQL « dans de nombreux endroits », mais jeter l'exception est vers le haut généralement pas appelé la manipulation. Seule la partie qui utilise try-catch "gère" l'exception, qui, suivant mon conseil, serait la plus haute couche que vous avez. Modifier: comme this answer, vous pouvez essayer de l'attraper dans votre DAO, et lancer une exception différente (plus générique) vers le haut, car les couches supérieures ne sont pas nécessairement utilisées pour toutes les données spécifiques à la base de données. détails. Ce serait une façon encore plus fantaisiste de le faire, même si cela peut être exagéré, selon votre situation.

+1

Exactement ce que je recommanderais. Encore une précision: la seule situation où une méthode est autorisée à retourner normalement (sans exception) est si elle a complètement rempli son travail. Dans le cas contraire, il doit informer l'appelant de l'échec: lancer une exception ou laisser passer une exception existante. –