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
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).
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.
- 1. Entrée à partir du script shell
- 2. Obtention d'un System.Type à partir du nom partiel du type
- 3. Obtention d'événements à partir du WPF Checked ComboBox
- 4. Obtention du nom de modèle dans le modèle django
- 5. générer viewmodel à partir du modèle?
- 6. Obtention du DataType de @JPA à partir de JPA
- 7. Obtention du nom d'affichage à partir d'un combo domain \ alias
- 8. Obtention du chemin d'accès d'origine à partir de FileStream
- 9. Obtention du nom d'affichage de l'utilisateur à partir de WindowsIdentity
- 10. Obtention du texte à partir d'une zone de liste déroulante
- 11. Obtention du SQL à partir d'une migration Rails
- 12. Obtention du contenu d'iframe
- 13. Obtention d'ensembles de chaînes dans le calque de présentation
- 14. Obtention du NT-ID d'un utilisateur dans SharePoint
- 15. C: obtention du nom d'hôte à partir du socket TCP et UDP?
- 16. Ajout d'un contrôle utilisateur WPF à partir du code
- 17. Refactoring à partir du modèle de base de données partagée
- 18. Vélocité: masquer les méthodes à partir du modèle
- 19. accès au modèle à partir du fichier layout dans CakePHP
- 20. Obtention du chemin du répertoire .NET Framework
- 21. Eclipse: Accéder à un modèle d'éditeur à partir du code du plugin
- 22. Comment puis-je conserver le calque 'GUI' hors du calque 'Business Logic'?
- 23. Pourquoi la définition du point d'ancrage du rectangle des limites du calque est-elle si étrange?
- 24. Obtention de l'emplacement de l'utilisateur à l'aide de Google à partir du code .NET
- 25. Obtention d'un index correct à partir du tableau d'entrée dans JQuery
- 26. Obtention du nom de fichier du fichier dirigé par .htaccess?
- 27. Échange du contenu DIV à partir du même lien textuel
- 28. Obtention du contenu de PropertyGrid?
- 29. FluentNHibernate: Obtention du fichier Examples.FirstProject
- 30. Pourquoi setFrame augmente le nombre de références du calque?
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 –