2009-07-09 4 views
0

Disons que j'ai une AddProductToCartTask avec une méthode Execute().Passer des messages de la couche d'application à la vue

Maintenant, la tâche est appelée à partir d'un contrôleur. Dans la méthode Execute, est une vérification qui, si elle n'est pas satisfaite, l'action n'est pas effectuée. Supposons que le message renvoyé soit: "Vous n'avez pas assez de bonus pour acheter ce produit". J'ai pensé à lancer un événement quand la validation du domaine échoue - mais cela signifierait que dans le contrôleur je dois avoir toutes sortes de variables de classe qui ont besoin de vérifier dans l'action (pour déterminer si j'ai besoin de mettre un message d'erreur , ou j'ai besoin de rediriger .. etc)

Au lieu de cela, je pourrais avoir une méthode sur la tâche: GetErrorMessages(). Si vide renvoyer l'objet JSON s'il n'est pas vide renvoyer le message. Ou la méthode pourrait renvoyer une énumération qui dirait si j'ai besoin de rediriger ou de mettre un message ou retourner l'objet ....

Je ne sais pas quelle route prendre. Toute contribution serait appréciée. Comment faites-vous passer les messages de votre couche de domaine?

Édition: ceci est principalement dans un contexte AJAX. Même si je ne suis pas sûr que ce soit important car c'est une action qui est appelée de quelque part.

+0

Clarification: vous appelez cette méthode avec AJAX? (JsonResult) Il est important de le savoir car cela déterminera la direction que vous pouvez prendre. – GalacticCowboy

Répondre

0

Je pourrais mal comprendre votre demande, mais il me semble que vous voulez une fonctionnalité de messages centraux, plutôt que quelque chose de spécifique à l'objet de tâche. Si vous le laissez dans votre tâche, alors la tâche doit être conservée dans la portée et "vivante" jusqu'à la requête AJAX.

Je fais quelque chose de similaire, mais directement à partir du contrôleur.

J'ai une classe statique appelée Messages. Il a des méthodes AddMessage(), GetLastMessage() et GetAllMessages(). Au premier appel, chacun vérifiera la variable de session de l'utilisateur et, si rien n'est trouvé, créera et sauvegardera un objet < chaîne >(). Les méthodes sont fondamentalement juste une interface à la file d'attente. La file d'attente est sympa car elle gère le push/pop qui supprime automatiquement les messages "visualisés".

Mon contrôleur fait:

Messages.AddMessage("Product Saved"); 

Vous pourriez potentiellement faire:

Messages.AddMessage(task...GetErrorMessages()); 

Alors, de mon point de vue, j'ai une aide html qui vérifie le nombre de messages d'erreur il y a et, le cas échéant , crée <ul> avec chaque message en tant que <li>.

Vous pouvez tout aussi bien avoir un contrôleur GetMessages() qui renvoie des messages en tant qu'objet JSON.

James