2008-12-03 12 views
9

Je suis en train d'écrire ma première application avec ASP.NET MVP (tentative de contrôleur de supervision) et Unit Testing (mieux vaut tard que jamais!), Et j'ai rencontré un peu de dilemme . J'ai écrit 3 contrôles utilisateur, tous testés et interférés, présentateurs en remorque. Maintenant, je suis venu à une page qui prend ces trois contrôles utilisateur et a rencontré le problème suivant:ASP.NET MVP - Utilisation des contrôles utilisateur

Contrôle utilisateur 1 est DateSelector, c'est un contrôle de calendrier avec un couple d'autres boutons/listes. Rien de vraiment excitant.

Le contrôle utilisateur 2 est DailyList. Devinez ce que c'est. Quoi qu'il en soit, vous pouvez sélectionner/supprimer etc. si vous sélectionnez un élément dans la grille, il doit remplir le contrôle utilisateur 3.

Le contrôle utilisateur 3 est ItemDetail. Voici les DropDownLists, TextBoxes, etc ... certains avec des dépendances existantes sur d'autres (en sélectionnant une option dans DropDown on affecte les options dans DropDown 2).

Si je sélectionne une nouvelle date à partir de DateSelector, est-ce que je déclenche l'événement à partir de DateSelector Presenter? Je dois en quelque sorte laisser les autres contrôles utilisateur savoir qu'une nouvelle date a été sélectionnée, afin qu'ils puissent relier leurs données, mais comment? Si j'utilise le présentateur de la page pour m'abonner aux présentateurs des vues de contrôle utilisateur, ne violerai-je pas de façon flagrante la loi de Demeter (exposant les présentateurs en tant que propriétés à travers leurs vues)? Ne dois-je pas utiliser le présentateur de la page en tant que contrôleur de la page? Y a-t-il quelque chose qui me manque? Tout ce que j'ai lu jusqu'ici dit: «MVP est génial, même avec les contrôles utilisateur», mais l'utilisation des contrôles utilisateur est facilement oubliée quand il s'agit d'exemples. Il me semble que MVC serait plus proche de mon mode de pensée sur celui-ci, mais actuellement, MVC n'est pas une option. Toute aide serait géniale ici. Merci d'avance.

Répondre

4

Le présentateur de page doit être celui qui coordonne les interactions entre les contrôles de la page. Qui d'autre le ferait? Je demanderais au présentateur de la page d'écouter l'événement du contrôle utilisateur DateSelector. Du point de vue du présentateur de page, il n'a probablement pas besoin de savoir qui a déclenché l'événement (vue ou présentateur) car il regarde le DateSelector comme un contrôle entièrement encapsulé. Les fonctionnements internes devraient être cachés du présentateur de la page. Tout ce qu'il sait, c'est que le contrôle utilisateur DateSelector a déclenché un événement, et qu'il doit maintenant notifier les autres contrôles sur la page, soit en augmentant son propre événement, soit en appelant explicitement des méthodes sur le présentateur.

+0

Merci pour la clarification. Je suppose que mon vrai problème était de savoir où définir l'événement pour DateSelector. Puisque j'ai besoin d'accéder à l'événement à partir de la page, il devra être déclaré dans la vue (mais peut être levé depuis le présentateur). Pour votre information, vos articles de blog m'ont beaucoup aidé à démarrer. Merci! – jstephenson

Questions connexes