2009-06-17 4 views
0

Problème lié au modèle de conception MVP ou MVC (s'applique à l'un ou à l'autre). Je ne peux pas comprendre comment inviter proprement pour l'entrée d'utilisateur de la couche de modèle? En fonction de certaines valeurs du modèle, il se peut que je doive demander à l'utilisateur d'entrer des données au milieu d'un processus. Par exemple, nous allons prendre un hypothétique processus de saisie de commande d'achat (PO). Dites après que l'utilisateur a appuyé sur un bouton dans la vue, il appelle le présentateur en transmettant les détails du bon de commande à partir de la vue. Le présentateur appelle ensuite le modèle pour valider et insérer le nouveau PO dans une collection de bons de commande. L'un des contrôles de validation dans le modèle consiste à s'assurer qu'un autre PO n'a pas déjà été saisi avec les mêmes éléments. Si tel est le cas, l'application doit inviter l'utilisateur à confirmer que le bon de commande n'est pas un doublon. L'application est actuellement approfondie dans le modèle. Comment puis-je remonter jusqu'à la vue pour récupérer l'entrée de l'opérateur, puis revenir au code du modèle là où il l'avait laissé pour terminer le processus d'entrée du bon de commande?Obtention d'une entrée utilisateur à partir du calque du modèle

Répondre

0

Dans un paper I read on presenter first, il a été suggéré que le présentateur avait des dépendances sur le modèle et sur la vue et était abonné aux événements du modèle et de la vue. Cela signifierait que vous pouvez déclencher un événement à partir du modèle au point où le traitement ne peut pas continuer. Le présentateur gère l'événement à partir du modèle en appelant une méthode sur la vue (ce qui invite l'utilisateur). La valeur de retour de la méthode sur le modèle sera ensuite renvoyée au modèle (un paramètre in/out de l'événement, comme les sous-classes EventArguments utilisées par .NET).

0

Vous souhaiterez peut-être examiner une forme d'interaction de notification entre votre modèle et les autres composants de votre modèle d'interface utilisateur.

Martin Fowler a écrit les here.

En ce qui concerne la profondeur dans le modèle, obtenir l'entrée de l'utilisateur, puis revenir dans le modèle: ne pas. Votre contrôleur est responsable des modifications apportées à votre modèle, et devrait effectuer la validation avant d'essayer de changer votre modèle. Cela peut nécessiter de séparer votre validation de votre code de mise à jour.

+0

Pouvez-vous mettre une logique dans la couche du contrôleur pour frapper le modèle pour la validation, puis si cela réussit frapper le modèle pour la mise à jour? La façon dont j'ai compris le calque à travailler est que sa seule responsabilité est de mettre à jour la vue. Toute la logique d'application résiderait dans le modèle. Peut-être que c'est l'une des différences entre les modèles MVP et MVC? Il est logique pour moi que la couche de contrôleur pourrait faire quelque chose comme: Si model.NewPOIsValid (PO) Puis Model.AddPO (PO) Fin si –

Questions connexes