3 votes

Traitement des exceptions dans une architecture en couches

Nous sommes en train de remanier (et, bien sûr, de reconcevoir) nos services selon une conception en couches. Nous avons une couche d'opérations de service (BLL), une couche d'abstraction de réseau -> (traite le proxy de réseau), une couche d'abstraction de données. Mais nous sommes un peu perplexes quant à notre stratégie de gestion des exceptions.

  1. Nous ne voulons pas exposer trop d'informations de la BLL au monde extérieur. (des autres couches vers la BLL, c'est bien).
  2. Nous ne voulons pas encombrer le code avec des piles try catch.
  3. Nous ne voulons pas mélanger le code de gestion des exceptions (comme la journalisation, l'envoi d'e-mails, etc.) dans les blocs de capture.

Quelqu'un pourrait-il envoyer des exemples de code ou des pointeurs de littérature que nous pouvons utiliser pour concevoir notre cadre simple de gestion des exceptions ?

3voto

Arnis L. Points 18316

Nous ne voulons pas exposer trop d'informations de la BLL au monde extérieur.
(d'autres couches vers bll, c'est bon)

C'est la BLL elle-même qui définit ce qui est exposé. Assurez-vous de montrer ce qui est destiné à être vu.

Nous ne voulons pas encombrer le code avec des piles try catch.

Alors ne le faites pas. Les exceptions sont des exceptions. Ne contrôlez pas le flux en les utilisant. Laissez-les exploser.

Nous ne voulons pas mélanger le code de gestion des exceptions (comme la journalisation, l'envoi d'e-mails, etc.) dans les blocs de capture.

Si Votre logique ne repose pas sur le traitement des exceptions (ce qui ne devrait pas être le cas) et que Votre le code se protège lui-même (ce point est important, votre demande doit TOUJOURS exploser sur un état invalide au lieu de continuer à travailler. sinon - il est difficile de comprendre ce qui cause quoi), alors il est plus que suffisant d'envelopper toute l'application avec un seul gestionnaire d'erreur qui vide la trace de la pile lorsque cela est nécessaire.

Par exemple, en .net, vous pouvez utiliser l'abonnement pour événement d'exception non géré par l'appdomaine pour ça.

J'utilise personnellement ELMAH pour mon application web - quelques lignes dans app.config et j'ai un bon journal d'erreurs, stocké dans sqlite, facilement accessible depuis l'application web elle-même. C'est à peu près tout ce que j'ai obtenu en matière de gestion des erreurs.

2voto

Sandeep Points 2102

1voto

Ladislav Mrnka Points 218632

La gestion des exceptions peut être aussi complexe que vous le souhaitez, mais la bonne méthode consiste à utiliser une définition globale. Par exemple par des aspects que vous pouvez construire avec n'importe quel framework AOP - partie de la plupart des conteneurs IoC comme Unity, Windsor Castle, Spring.NET. Une catégorie distincte de frameworks AOP est PostSharp qui ajoute des aspects au moment de la compilation plutôt qu'au moment de l'exécution.

Vous pouvez également consulter Enterprise Library 5.0 et ses Bloc d'application pour le traitement des exceptions qui vous permet d'effectuer un traitement des exceptions basé sur des règles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X