2009-10-14 5 views
1

Je voudrais utiliser le modèle Model View Presenter pour une bibliothèque contenant des commandes utilisateur qui seront utilisées dans d'autres projets. Selon MVP, je dois implémenter une interface IView sur un contrôle utilisateur et la transmettre à une classe Presenter.MVP - Contrôles Utilisateur - Cacher l'interface IView des consommateurs?

Dans mon cas, les consommateurs n'ont pas besoin d'accéder au contrat IView. Mais étant donné que l'interface IView est un contrat public, cela signifie que les utilisateurs du contrôle utilisateur peuvent également accéder à ses méthodes \ properties et que celles-ci ne sont accessibles qu'au Presenter.

Quelle est une bonne manière d'accomplir ceci?

+0

Bonjour RS Conley Merci pour votre réponse. Je ne comprends pas complètement ce que vous voulez dire mais il y a une chose que je fais que vous conseillez qui ne met pas en œuvre le IView sur le contrôle de l'utilisateur. Actuellement, je le fais comme ceci: Dans le contrôle de l'utilisateur, j'ai créé une classe imbriquée qui accepte le contrôle de l'utilisateur dans son constructeur. La classe imbriquée implémente IView et connaît le présentateur. De cette façon, je peux cacher le contrat IView des consommateurs du contrôle et je gère tout dans la classe imbriquée. – anagels

+0

Cette classe est juste un substitut pour le contrôle alors. Ce que je voulais savoir, c'est que la vue est la forme, pas la commande, même indirectement, à travers une classe d'aide. Seul le temps que je peux penser quand un contrôle peut être assimilé à une vue est qu'une forme a plusieurs onglets ayant chacun une vue du modèle et chacun des onglets est implémenté dans un contrôle. Il serait alors logique d'avoir un contrôle implémentant une vue (directement ou indirectement). –

Répondre

0

Je considère toujours que les contrôles utilisateur liés aux vues ne sont pas une vue séparée. Ils devraient pouvoir accéder à n'importe quel présentateur auquel la vue à laquelle ils sont liés peut accéder, mais ne sont pas en eux-mêmes des vues. Au contraire, ils font partie d'une vue et peuvent être remplacés ou modifiés sans se préoccuper du présent si l'interface utilisateur change.

Dans votre exemple spécifique, le contrôle Utilisateur ne doit pas implémenter d'interface de vue. Au lieu de cela, je voudrais simplement que l'assembly User Control Assembly référence l'assembly Presenter et possède des propriétés pour permettre l'accès à l'objet View dont il fait partie.

1

J'ai trouvé une solution pour ma situation.

Je rends mes interfaces IView internes et les implémente explicitement sur les contrôles utilisateur. Ainsi, les interfaces IView ne font pas partie de l'interface publique d'un contrôle utilisateur, ce dont j'ai besoin dans mon cas.

Questions connexes