Question

J'essaie de créer une sorte d'interface utilisateur maître / détail à l'aide d'un modèle MVP. J'ai les suspects habituels:

interface IMainView{}
class MainView: Form, IMainView{}

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

J'ai également un UserControl qui est également une vue de son propre triade MVP:

interface ISubView{}
class SubView: UserControl, ISubView{}

interface ISubPresenter{}
class SubPresenter{}

MainPresenter crée une instance de SubPresenter qui, à son tour, crée une instance de SubView. Mon problème est que les vues ne contiennent pas de références les unes aux autres ou ne se connaissent même pas. Ils ne connaissent que leurs propres présentateurs, mais je souhaite attacher une vue qui est un UserControl à une autre vue qui est un formulaire. Est-il possible de faire et de maintenir toujours l'ignorance de chaque point de vue?

Jusqu'à présent, toutes les vues exposaient les propriétés requises par chaque présentateur en tant que types de système. Ainsi, les présentateurs ne seraient pas affectés si un contrôle ListBox était remplacé par un contrôle ComboBox ou un groupe RadioGroup. Si possible, j'aimerais continuer dans cette voie, mais je suis disposé à rompre ce modèle si je n'ai pas d'autre choix.

Mes raisons pour cela sont que MainView présente à l'utilisateur une collection d'objets. Chaque objet peut être l'une de plusieurs (plus de 50) classes différentes. Tous implémenteront une interface commune, mais l'interface utilisateur permettant de manipuler chaque objet variera en fonction de la classe sous-jacente.

À propos, il s'agit d'une application Winforms ciblant .NET 2.0 (compilé en C # 3.0 cependant)

Était-ce utile?

La solution

J'ai résolu ce problème en faisant en sorte que le sous-représentant transmette une référence à sa vue au présentateur principal, qui la transmet ensuite à sa vue, qui l'assigne ensuite à un panneau vide.

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

Il est passé comme un vieil objet simple, donc aucun des présentateurs ne doit inclure de références à l'espace de noms winforms. MainView assume simplement qu’il est une personne décédée de UserControl et le lance comme tel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top