2008-12-23 14 views
2

J'utilise le modèle MVC dans une application .NET winform. Il y a des endroits dans le contrôleur qui peuvent provoquer une exception. Plutôt que d'attraper l'exception et de supprimer une boîte de message, ce qui est une responsabilité de View, je ne fais rien dans le Controller et laisse la View envelopper cette zone dans un try/catch. Jusqu'à présent, il n'y a rien à faire dans ces exceptions sauf afficher un bon message à l'utilisateur. Ce ne sera pas toujours le cas. La vue affiche l'erreur d'exception dans une boîte de message. Je n'aime pas ça parce que les classes Exception viennent du modèle. Ainsi, la vue atteint directement le modèle pour accéder aux exceptions. Mais, comment d'autre peut-il être fait et toujours suivre le modèle MVC?Modèle MVC dans .NET: Can View peut-il appeler des exceptions dans le modèle?

Je pourrais demander au contrôleur de gérer l'exception et de renvoyer une chaîne à l'interface utilisateur. Comment cela se fait-il cependant? Si functionA renvoie void, je ne veux pas modifier son type de retour juste pour afficher la vue.

Répondre

1

Je pense que c'est la responsabilité des contrôleurs de dire à la vue de montrer un message et quel message montrer. Par conséquent, je voudrais mettre une méthode DisplayError (chaîne) sur la vue et appelez cela lorsque vous attrapez l'exception dans le contrôleur. De cette façon, le contrôleur gère les exceptions de sorte que la vue gère toujours les détails de l'affichage d'une boîte de message avec le message que je lui dis d'utiliser.

0

Généralement, ce que je fais est que le Presenter (Controller) expose un événement OnError que l'affichage écoute. La vue utilise ensuite les informations de cet événement pour présenter une interface utilisateur, mettre à jour une barre d'état ou autre.

0

Je ne pouvais pas complètement échapper à cela depuis que j'utilise Generic Events. J'utilise le modèle d'événement pour les exceptions, mais les événements sont génériques. Cela nécessite que l'appelant connaisse votre événement générique. Pourtant, que tout se passe via intellisense dans la vue et rend encore la vue très stupide :)